使用Linq查找长度最大的数组

aurhwmvo  于 2023-04-27  发布在  其他
关注(0)|答案(4)|浏览(132)

我需要在一个数组列表中找到最大的数组。使用基本的技巧,我可以做到这一点

List<int[]> intArrayList;
        ...
        int largestArrayIndex = 0;
        for (int i = 1; i < intArrayList.Count; i++)
        {
            if (intArrayList[largestArrayIndex].Length < 
                intArrayList[i].Length)
            {
                largestArrayIndex = i;
            }
        }

但是,我很好奇,是否有一种更简洁的方法可以用Linq来实现这一点?

**编辑:**我想要最大的数组。所以,如果我有一个{ int[5],int[7],int[9],int[3] }的列表,我想要int[9]数组的索引或引用。

谢谢。

91zkwejq

91zkwejq1#

你可以这样做:

var longest = intArrayList.Aggregate((i1,i2) => i1.Length > i2.Length ? i1 : i2);

性能方面,它只会迭代列表一次,所以我想说它和你的代码差不多。
编辑:只是想澄清我的代码返回最长的数组,而不是最长的长度。
干杯

q5lcpyga

q5lcpyga2#

另一种方式:

int[] longestArray =  intArrayList.OrderBy(x => x.Length).Last();

它返回最长的数组。如果你需要一个最长数组的索引,那么:

int index = intArrayList.Select((x,i) => new {Length = x.Length, Index = i}).OrderBy(x => x.Length).Last().Index;
whlutmcx

whlutmcx3#

我相信原来的方法是好的。下面的代码应该做同样的事情:

int maxLen = int.MinValue;
int maxLenIndex = intArrayList.SelectMany((array, index) => array.Length > maxLen && ((maxLen = array.Length) > int.MinValue) ? new[] { index } : new int[0]).Last();
30byixjq

30byixjq4#

这是一个复杂度为O(n)的函数,但是你需要在列表中至少有一个数组。

int lengthOfLongest = intArrayList.Max(arr => arr.Length);
// For the array
int[] longestArray = intArrayList.First(arr => arr.Length == lengthOfLongest);
// For the index
int indexOfLongest = intArrayList.FindIndex(arr => arr.Length == lengthOfLongest);

相关问题