【问题标题】: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

标签: c# arrays sorting


【解决方案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]; });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-08
    • 2023-01-10
    • 2017-03-14
    • 2011-12-31
    • 1970-01-01
    • 1970-01-01
    • 2020-12-21
    相关资源
    最近更新 更多