如何在数组列表中获取特定的列式最大值?

时间:2015-12-05 17:58:19

标签: c# linq multidimensional-array

我有一个填充了整数数组的列表“XYZarr”,如下所示。

        int[] intarr1 = new int[3]{  1, 4, 15};
        int[] intarr2 = new int[3] { 10, 5, 8};
        int[] intarr3 = new int[3] { 7, 8, 12 };
        int[] intarr4 = new int[3] { 7, 8, 9 };

        List<int[]> XYZarr = new List<int[]>() { intarr1, intarr2, intarr3, intarr4 };

我想从列表中只得到三个索引,其中int [2]最大(即第三个条目)。所以结果索引应该是列表“XYZarr”的0,2,3

我可以通过遍历列表来实现,但我想使用LinQ。我无法正确地说出这个问题,但是......我希望你明白我的观点

2 个答案:

答案 0 :(得分:1)

我假设“int [2]是最大值”意味着数组中的第3个元素是该数组中的最大元素。

以下是:

var result = 
    XYZarr
    .Select((list,index)
        => new {list,index})
    .Where(x => x.list.Max() == x.list[2])
    .Select(x => x.index)
    .ToList();

如果XYZarr包含3个以上的数组且您只想获得3个结果,那么请使用Take方法,如下所示:

var result = 
    XYZarr
    .Select((list,index)
        => new {list,index})
    .Where(x => x.list.Max() == x.list[2])
    .Select(x => x.index)
    .Take(3)
    .ToList();

答案 1 :(得分:1)

这个怎么样:

var result = Enumerable.Range(0, XYZarr.Count)
    .OrderByDescending(i => XYZarr[i][2])
    .Take(3)
    .ToList();