我需要在数组列表中找到最大的数组。 使用基本技术,我可以做到这一点
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]数组的索引或引用。
感谢。
答案 0 :(得分:5)
你可以这样做:
var longest = intArrayList.Aggregate((i1,i2) => i1.Length > i2.Length ? i1 : i2);
性能方面,它只会迭代列表一次,所以我说它与你的代码几乎相同。
编辑:只是想说明我的代码返回的是最长的数组,而不是最长的数组。
干杯
答案 1 :(得分:3)
另一种方式:
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;
答案 2 :(得分:1)
我相信原来的方法很好。以下代码应该这样做:
int maxLen = int.MinValue;
int maxLenIndex = intArrayList.SelectMany((array, index) => array.Length > maxLen && ((maxLen = array.Length) > int.MinValue) ? new[] { index } : new int[0]).Last();