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

C# 尝试按升序C排列2D数组#,c#,arrays,2d,C#,Arrays,2d,我正在尝试按升序排列2D数组。这段代码针对1D数组运行,但我正在努力为2D实现它,以便将数组的每一行按升序排列 1D 二维 您可以这样做: 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 i

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

1D

二维


您可以这样做:

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数组进行排序。

有多种解决方案,我认为一种解决方案是使用数组数组()

比方说,如果您有如下定义的锯齿数组

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

int[][] sorted = numbers2.Select(x=> string.Join("-", x.ToArray()))
            .OrderBy(x=>x)
            .Select(x=> x.Split('-').Select(int.Parse).ToArray())       
            .ToArray(); 
另一个选项是,输入是一个2d数组,您可以执行大致相同的操作,但输出是按锯齿数组排序的

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(); 
int[][]排序的数组=numbers.Cast()
.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();
这些只是我的选择,你将是最好的选择哪个是正确的你的解决方案


勾选此项

您能提供一个示例吗?
int[][] sorted = numbers2.Select(x=> string.Join("-", x.ToArray()))
            .OrderBy(x=>x)
            .Select(x=> x.Split('-').Select(int.Parse).ToArray())       
            .ToArray(); 
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();