【发布时间】:2020-12-31 17:34:33
【问题描述】:
我试图弄清楚如何对二维数组进行排序。我已经看到为其他语言发布的这个问题,但不是 C#。我正在处理一个编码挑战,其中输入是二维数组的形式,我需要按第一列排序。
我正在考虑为二维 int 数组创建一个扩展方法,该方法采用左列或右列的参数,但不确定什么是最好的排序算法。我想我可以将 2D int 数组转换为 SortedDictionary 然后将其转换回来,但如果我再次将其转换回 2D 数组似乎效率低下。最好将其转换为 SortedDictionary 并将其保留在该数据类型中,还是有人对 2D 数组有惊人的排序算法?
public static int[][] Sort(this int[][] a2DArr, bool sortLeftCol = true)
{
SortedDictionary<int, int> sd = new SortedDictionary<int, int>();
int[][] sorted2Darr = new int[a2DArr.Count()][];
if (sortLeftCol == true)
{
for (int i = 0; i < a2DArr.Count(); i++)
{ sd.Add(a2DArr[i][0], a2DArr[i][1]); }
for (int i = 0; i < a2DArr.Count(); i++)
{
sorted2Darr[i][0] = sd.ElementAt(i).Key;
sorted2Darr[i][1] = sd.ElementAt(i).Value;
}
}
else //sort by right column
{
for (int i = 0; i < a2DArr.Count(); i++)
{ sd.Add(a2DArr[i][1], a2DArr[i][0]); }
for (int i = 0; i < a2DArr.Count(); i++)
{
sorted2Darr[i][0] = sd.ElementAt(i).Value;
sorted2Darr[i][1] = sd.ElementAt(i).Key;
}
}
return sorted2Darr;
}
【问题讨论】:
-
也许
a2DArr.OrderBy(x => x[0])? -
还发现,但是在这里你有一个锯齿状数组(数组的数组),而不是一个多维数组 2D ......这不是一回事:tutorialspoint.com/… & @987654322 @&c-sharpcorner.com/article/how-to-sort
-
@MichaelRandall 我试过了,但它按第二/右列排序,我需要做的是按左列(第 0 列)排序。我认为 .OrderBy 用于一维数组,但代码 sn-p 似乎对按右列排序很有用。
-
不确定我是否关注,dotnetfiddle.net/7z89fI