如何按列对二维数组(锯齿状)进行排序[重复]

Posted

技术标签:

【中文标题】如何按列对二维数组(锯齿状)进行排序[重复]【英文标题】:How to sort a 2 dimensional array (jagged) by column [duplicate] 【发布时间】: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 =&gt; x[0]) ? 还发现,但是在这里你有一个锯齿状数组(数组的数组),而不是一个多维数组 2D ......这不是一回事:tutorialspoint.com/… & @987654322 @&c-sharpcorner.com/article/how-to-sort @MichaelRandall 我试过了,但它按第二/右列排序,我需要做的是按左列(第 0 列)排序。我认为 .OrderBy 用于一维数组,但代码 sn-p 似乎对按右列排序很有用。 不确定我是否关注,dotnetfiddle.net/7z89fI 【参考方案1】:

我找到了一个answer posted where someone had asked a similar question,但它是关于 rectangular 数组的。这是一个使用 Array.Sort 和 lambda 表达式的不错的小方法:

Array.Sort(contests, (a, b) =>  return a[0] - b[0]; );

这将按第一列对二维数组进行排序,并将相应的数据保留在第二列中(如按 ID 对行进行排序)。如果任何行左侧的值相同但右侧的值不同,则它将按这些行中第二列中的值排序。

如果您为第一个值输入 1,那么它将按右列排序:

Array.Sort(contests, (a, b) =>  return a[1] - b[0]; );

【讨论】:

以上是关于如何按列对二维数组(锯齿状)进行排序[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何按列对多维数组进行排序?

如何在 C# 中对二维(矩形)数组进行排序?

C++ 按列对二维向量进行排序

如何按列值对二维数组进行排序?

基于一列对二维数组进行排序

基于列对二维向量数组进行排序