请如何按第二列desc,然后按第一列asc(然后将结果等级插入第三列,我想可能是一个单独的问题)对以下数组(在C#中)进行排序。 我是C#的初学者,我花了很多时间寻找这个看似简单的问题的答案,但是我找不到适合我的任何方法。谢谢您的任何帮助。
int[,] myArray = new int[5, 4]
{
{1, 7, 0, 0} ,
{2, 12, 0, 0} ,
{3, 15, 0, 0} ,
{4, 7, 0, 0} ,
{5, 1, 0, 0}
};
答案 0 :(得分:4)
在多维数组中,实际上没有“行”的概念。所有值彼此之间都具有相同的关系。这就是为什么对多维数组进行排序有些棘手的原因。
使用jagged arrays(基本上是数组数组)会变得更加容易。您的数组如下所示:
int[][] myJaggedArray = new int[][]
{
new int[] { 1, 7, 0, 0 },
new int[] { 2, 12, 0, 0 },
new int[] { 3, 15, 0, 0 },
new int[] { 4, 7, 0, 0 },
new int[] { 5, 1, 0, 0 },
};
您还可以将多维数组转换为锯齿状数组,如下所示:
int[][] myJaggedArray = new int[myArray.GetUpperBound(0) + 1][];
for(int i = 0; i < myJaggedArray.Length; i++)
myJaggedArray[i] = Enumerable.Range(0, myArray.GetUpperBound(1) + 1).Select(k => myArray[i,k]).ToArray();
一旦有了锯齿状的数组,使用LINQ进行排序就很容易了
var result = myJaggedArray
.OrderBy(row => row[1])
.ThenBy(row => row[0])
.Select((row, idx) =>
{
row[2] = idx;
return row;
})
.ToArray();