我有一个填充了整数数组的列表“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。我无法正确地说出这个问题,但是......我希望你明白我的观点
答案 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();