我试图按升序排列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();
}
答案 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