尝试按升序排列2D数组C#

时间:2016-03-28 04:15:22

标签: c# arrays 2d

我试图按升序排列2D数组。这段代码针对一维数组运行,但我正在努力为2D实现它,以便它按照升序排列数组的每一行。

1D

    public static void Main(string[] args)
    {
        int[] sam = { 4, 7, 2, 0 };

        Array.Sort(sam);
        foreach (int value in sam)
        {
            Console.Write(value);
            Console.Write(' ');
        }
        Console.WriteLine();
    }

2D

public static void Main(string[] args)
        {
            int[] sam = { 4, 7, 2, 0 }, {4, 6, 2, 0};

            Array.Sort(sam);
            foreach (int value in sam)
            {
                Console.Write(value);
                Console.Write(' ');
            }
            Console.WriteLine();
        }

2 个答案:

答案 0 :(得分:0)

您可以这样做:

static void Main(string[] args) {
        int[][] sam = new int[2][];
        sam[0] = new int[] {4, 6, 2, 0};
        sam[1] = new int[] {4, 7, 2, 0};

        foreach(var array in sam)
        {
            Array.Sort(array);
            foreach(var item in array)
                Console.Write(item+" ");
            Console.WriteLine();
        }
}

在这里,我们声明一个2D数组,然后一次初始化每个数组。然后,我们循环遍历 sam 数组,然后对其中的每个1D数组进行排序。

答案 1 :(得分:0)

有多个解决方案,我正在考虑使用阵列数组(Jagged Array)。

假设您有如下定义的锯齿状阵列

    int[][]  numbers2 = new int[][] {
        new int[]{4,5,6}, 
        new int[]{1,2,3}, 
        new int[]{7,8,9}
        ...
    };

您可以使用

获取已排序的Jagged数组
int[][] sorted = numbers2.Select(x=> string.Join("-", x.ToArray()))
            .OrderBy(x=>x)
            .Select(x=> x.Split('-').Select(int.Parse).ToArray())       
            .ToArray(); 

另一种选择,让我们你的输入是一个二维数组你可以或多或少相同,但输出是排序Jagged数组。

int[][] sorted_array  = numbers.Cast<int>()     
        .Select((x, i) => new { Index = i, Value = x })
        .GroupBy(x => x.Index / (numbers.GetUpperBound(0) +1))
        .Select(x => string.Join("-", x.Select(v => v.Value)) )
        .OrderBy(x=>x)
        .Select(x=> x.Split('-').Select(int.Parse).ToArray())       
        .ToArray(); 

这些只是我的选择,您将最好选择适合您的解决方案。

选中此Example