根据一行中的值对二维数组进行排序

本文关键字:二维数组 排序 一行 | 更新日期: 2023-09-27 18:19:22

我有这样的数据

1   3   9   2   7   8   9
120 70  76  190 300 50  40

如何根据第二行对数组进行排序并返回第一行的最大值的值。我的意思是,输出变成>

7    2    1    9   3   8   9
300  190  120  76  70  50  40

我得到7作为输出

根据一行中的值对二维数组进行排序

首先,我会把你的数据从矩形数组中取出来,变成更有用的东西。要做到这一点,首先将数据转换为List<Tuple<int, int>>,因为它更容易使用。

int[,] rawData = { { 1, 3, 9, 2, 7, 8, 9 }, { 120, 70, 76, 190, 300, 50, 40 } };
var data = new List<Tuple<int, int>>();
for(int i = 0; i < rawData.GetLength(1); i++)
{
    data.Add(new Tuple<int, int>(rawData[0, i], rawData[1, i]));
}

那么它只是一个使用Linq查询来获取你想要的数据的问题。

var result = data.OrderByDescending(x => x.Item2).First().Item1;

小提琴

如果你想知道答案'什么是现在的最大值'(或者换句话说,保持顺序而不是在处理后排序-小心它有性能损失!)然后SortedList可能会派上用场:

        int[] a = { 1, 3, 9, 2, 7, 8, 9 };
        int[] b = { 120, 70, 76, 190, 300, 50, 40 };
        var sortedList = new SortedList<int,int>();
        for (int i = 0; i < a.Length; i++)
        {
            sortedList[b[i]] = a[i];        
        }
        Console.WriteLine(sortedList.Last().Value);    

(如果你想看到什么是当前的最大值,当你添加数据只是移动WriteLine到循环内)