【问题标题】:Sorting two dimensional array by columns in C#在C#中按列对二维数组进行排序
【发布时间】:2022-01-24 00:09:20
【问题描述】:

我想对二维数组进行排序。我不想订购第一个维度,而是订购内部维度。

例如,如果初始数组是这样的:

{{4, 1, 3},
{6, 5, 2},
{0, 9, 8}}

如果我们按第一行排序数组,结果将是:

{{1, 3, 4},
{5, 2, 6},
{9, 8, 0}}

我通过转置数组、排序和再​​次转置来做到这一点。但是有没有更好的方法呢?

【问题讨论】:

    标签: c# arrays multidimensional-array


    【解决方案1】:

    嗯,这有点奇怪,一开始我实际上误解了它。有很多方法可以做到这一点,但我能想到的方法都不是很好。我个人认为我会这样

    public class Matrix
    {
        private List<RowGroup> _groups;
    
        public Matrix(List<List<int>> matrix)
        { 
            //Removed for simplicity
        }
    
        public void SortMaxtrixByRow(int rowNumber)
        {
            this._groups.Sort((r1, r2) =>
            {
                return r1.Col[rowNumber].CompareTo(r2.Col[rowNumber]);
            });
        }
        public class RowGroup
        {
            public List<int> Col;
            public RowGroup(List<int> col)
            {
                Col = col;
            }
        }
    }
    

    这与您的转置类似。主要的好处是它是一个对象,所以如果你必须在同一个集合上进行多种排序,它就不需要一遍又一遍地重新转置它。

    除此之外,您可以复制所需的数组并对其进行排序,然后将每个值与原始值进行比较,以查看它如何移动并相应地移动其他行,但这只是假设您在每一行中使用唯一值,编写您的自己的排序算法,这样您就可以确定哪个索引,或者可以接受多个“正确”答案。

    【讨论】:

    • 嗨,扎克,谢谢你的回答,但不幸的是,我想订购列而不是行。与您类似的可以通过list.Sort((a, b) =&gt; a[rowNumber].CompareTo(b[rowNumber]));list.OrderBy(x =&gt; x[rowNumber]).ToList(); 实现
    猜你喜欢
    • 1970-01-01
    • 2013-08-17
    • 2021-02-03
    • 2019-05-17
    • 2015-01-30
    • 2012-12-15
    • 2018-05-14
    • 1970-01-01
    相关资源
    最近更新 更多