我一直在尝试订购二维阵列并一直在努力,所以我想知道是否有人可以给我一些建议。
我有一个数据数组,我希望根据第一列中的值对所有行进行排序。即。
fruits = [
{
name: 'apple'
quantity: 25
},
{
name: 'banana',
quantity: 25
}
];
使用.OrderBy(x => x [0])时出错:
' INT [,]'不包含' OrderBy的定义,也没有扩展方法' OrderBy'
我包含Systems.Linq但仍然收到错误。
这是我的代码片段:
people = [
{
name: 'fred',
fruits: [{ name: 'apple', quantity: 2 }, { name: 'banana', quantity: 3}]
},
{
name: 'wilma',
fruits: [{ name: 'apple', quantity: 1}, { name: 'banana', quantity: 0}]
}
];
答案 0 :(得分:0)
一个简单的解决方案:
int[,] x = new int[,]
{ {360,0,0,1},
{180,0,0,0},
{0 ,0,1,0}};
var list = new List<int[]>();
for(int i = 0; i < x.GetLength(0); i++)
{
var row = new int[x.GetLength(1)];
for(int j= 0; j < x.GetLength(1); j++)
{
row[j] = x[i, j];
}
list.Add(row);
}
var orderedList = list.OrderBy(r => r[0]).ToList();
当然,如果你需要一个数组作为结果,你必须从orderedList
重建它。
注意:如果性能很重要,您可以用Buffer.BlockCopy(...)
:
var list = new List<int[]>();
for(int i = 0; i < x.GetLength(0); i++)
{
var row = new int[x.GetLength(1)];
Buffer.BlockCopy(x, i *4* x.GetLength(1),row,0, x.GetLength(1)*4);
list.Add(row);
}
var orderedList = list.OrderBy(r => r[0]).ToList();
答案 1 :(得分:0)
如果你想用LINQ做,你可以这样做,但结果是List<int[]>
。如果您需要将结果作为二维数组,则必须使用循环,然后根本不使用LINQ会更好。
var ans = Enumerable.Range(0, x.GetLength(0)).Select(r => Enumerable.Range(0, x.GetLength(1)).Select(c => x[r,c]).ToArray()).OrderBy(row => row[0]).ToList();