我有一个不可变对象(immutable对象)的列表(在我的特定情况下是 Tuple<double, double>
的列表),我想更改具有最高 Item2 值的对象。
理想情况下会有一个我可以使用的 IndexOfMaxBy 函数,所以我可以这样做:
var indexOfPointWithHighestItem2 = myList.IndexOfMaxBy(x => x.Item2);
var original = myList[indexOfPointWithHighestItem2];
myList[indexOfPointWithHighestItem2] =
new Tuple<double, double>(original.Item1, original.Item2 - 1);
我看过How can I get LINQ to return the object which has the max value for a given property? ,并使用 Jon Skeet的 MaxBy 函数结合 Select 我可以做到:
var indexOfPointWithHighestItem2 =
myList.Select((x, i) => new { Index = i, Value = x })
.MaxBy(x => x.Item2).Index;
但这会为我列表中的每个对象创建一个新对象,并且必须有更简洁的方法。大家有什么好的建议吗?
最佳答案
看起来有一个FindIndex
List
上定义的方法非常适合此操作:
double max = myList.Max(t => t.Item2);
int index = myList.FindIndex(t => t.Item2 == max);
关于c# - 如何让 LINQ 返回集合中具有最大值的对象的索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5189477/