对锯齿状阵列进行排序

时间:2016-04-20 14:00:58

标签: c# arrays sorting jagged-arrays

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 };

我如何对它进行排序以便将第二列从最高到最低排序然后打印出整个数组?

3 个答案:

答案 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); }
));