这段代码有什么问题?
我正在使用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指令或程序集引用?
答案 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;
}
}
}
}