OrderBy在.NET C#中对2D数组进行排序

时间:2017-06-30 21:53:29

标签: c# arrays linq sorting

这段代码有什么问题?

我正在使用System.Linq

int[,] array = new int[3, 3] { { 1, 4, 2 },
                               { 4, 5, 1 },
                               { 7, 3, 8 } 
                             };

int[,] sortedByFirst = array.OrderBy(x => x[0]);
int[,] sortedBySecond = array.OrderBy(x => x[1]);
int[,] sortedByThird = array.OrderBy(x => x[2]);

错误:

  

您是否缺少using指令或程序集引用?

3 个答案:

答案 0 :(得分:0)

2D阵列不能很好地与LINQ配合使用。您希望ParentObject接收和排序的内容是什么,即使它是在n维数组上实现的?

OrderBy合作更好。

List

答案 1 :(得分:0)

你正在努力实现的目标含糊不清。您是否希望保留"网格行"当您按其中一个"列排序时,彼此同步"?或者你期望从单个"列"中获得价值?按顺序返回,与其他"列"?

分开

如果它是第一个,那么我建议关注与此问题类似的其他问题的this示例,并利用DataTable类防止您的行混在一起起来。

如果是第二个,那么您只需通过array[0].OrderBy(x=>x);订购该列

不过,我想你的代码......

        int[,] ordered = array.OrderBy(x => x[0]).ToArray();

...您希望使用int[][]类型数组,而不是int[,]类型数组。 OrderBy存在于另一个,但它没有做你期望我不想的事情。我刚尝试过,但我无法弄清楚它到底做了什么。

希望这有帮助!

答案 2 :(得分:0)

2D数组不适用于OrderBy。随时尝试:

 for (int i = 0; i < array.Length - 1; ++i)
                    {
                        for (int j = i; j < array.GetLength(0); ++j)
                        {
                           // for first column

                           int a = array[i,0]; // this way you can choose column whatever you want
                            int b = array[j,0];

                            if (a < b) 
                            {

                                for (int x = 0; x < array.GetLength(1); ++x)
                                {
                                    string temp = array[i, x];
                                    array[i, x] = array[j, x];
                                    array[j, x] = temp;
                                }
                            }

                        }
                    }