C#-按选定列对矩形数组进行排序
请告诉我如何按第二列desc,然后按第一列asc(然后在第三列插入结果秩,我想这可能是一个单独的问题)对以下数组(C#)进行排序。 我是C#的初学者,我花了相当长的时间寻找这个看似简单的问题的答案,但我找不到任何适合我的方法。非常感谢您的帮助,谢谢C#-按选定列对矩形数组进行排序,c#,sorting,multidimensional-array,C#,Sorting,Multidimensional Array,请告诉我如何按第二列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} };
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}
};
在多维数组中,实际上没有“行”的概念。所有值与另一个值的关系都是相同的。这就是为什么排序多维数组有些棘手的原因 当您使用基本上是数组的数组时,它会变得更容易。您的阵列如下所示:
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();
您还可以将多维数组转换为锯齿数组,操作如下:
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();
在多维数组中,实际上没有“行”的概念。所有值与另一个值的关系都是相同的。这就是为什么排序多维数组有些棘手的原因 当您使用基本上是数组的数组时,它会变得更容易。您的阵列如下所示:
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();
您还可以将多维数组转换为锯齿数组,操作如下:
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();
完美地工作(我刚刚用OrderByDescending替换了OrderBy),非常感谢您的解决方案和解释-我显然误解了矩形阵列的概念完美地工作(我刚刚用OrderByDescending替换了OrderBy),非常感谢您的解答和解释-我显然误解了矩形阵列的概念