var data = read();
switch (selector)
{
case 1://accending
data = data.OrderBy(inner => inner[2]).ToArray();
drawChart();
for (int i = 0; i < data[0].Length; i++)
{
for (int j = 0; j < data.Length; j++)
{
if (j != 0)
{
Console.Write(" ");
}
Console.Write(data[j][i] + " ");
}
Console.WriteLine();
}
complete = true;
break;
case 2://decending
complete = true;
break;
default:
Console.WriteLine("Not an option please enter a number between 1 and 2");
break;
}
我有一个名为数据的交错数组,这里正在打印,我需要能够根据用户输入(case1和2)对数组进行排序
说数据看起来像这样
jaggedarray[0] = new int[5] { 99, 999, 49, 79, 59 };
jaggedarray[1] = new int[3] { 199, 1999, 149 };
jaggedarray[2] = new int[2] { 999, 500 };
我如何对它进行排序以便将第二列从最高到最低排序然后打印出整个数组?
答案 0 :(得分:0)
试试这个:
int[][] jaggedarray = new int[3][];
jaggedarray[0] = new int[5] { 99, 999, 49, 79, 59 };
jaggedarray[1] = new int[3] { 199, 1999, 149 };
jaggedarray[2] = new int[2] { 999, 500 };
int arrayToSort = 2;
int selector = 1;
jaggedarray = Enumerable.Range(0, jaggedarray.Length).Select(x =>
{
if (x == arrayToSort)
{
if (selector == 2)
return jaggedarray[x].OrderByDescending(y => y).ToArray();
return jaggedarray[x].OrderBy(y => y).ToArray();
}
return jaggedarray[x];
}).ToArray();
Console.WriteLine(jaggedarray);
答案 1 :(得分:0)
使用Skip
跳过OrderBy
内的第一列,然后选择First
选择第二列以对该元素进行排序。
jaggedarray[0] = new int[5] { 99, 999, 49, 79, 59 };
jaggedarray[1] = new int[3] { 199, 1999, 149 };
jaggedarray[2] = new int[2] { 999, 500 };
jaggedarray = jaggedarray.OrderBy(j=>j.Skip(1).First()).ToArray(); // sort on second column.
工作Demo
答案 2 :(得分:0)
Hari Prasad答案的另一种方法,这是一个非常好的方法。
您可以使用Array.Sort
进行排序,并使用Comparison
定位到第二列。
类似的东西:
var jaggedarray = new int[3][];
jaggedarray[0] = new int[5] { 99, 999, 49, 79, 59 };
jaggedarray[1] = new int[3] { 199, 1999, 149 };
jaggedarray[2] = new int[2] { 999, 500 };
Array.Sort(jaggedarray, new Comparison<int[]>(
(x,y) => { return x[1] < y[1] ? -1 : (x[1] > y[1] ? 1 : 0); }
));