c# - 如何让 LINQ 返回集合中具有最大值的对象的索引?

标签 c# linq linq-to-objects

我有一个不可变对象(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/

相关文章:

c# - LINQ join 和 orderby 问题

c# - 以谓词为参数的方法

c# - 将 double 序列化为 JSON 时的小数精度为零

c# - 从 HttpResponseMessage 获取内容以使用 c# 动态关键字进行测试

c# - Linq Order By 包含列表

c# - Linq GroupBy 和多列

c# - 如何在字符串上添加 `.Take()` 并在末尾获取字符串?

c# - LINQ to SQL 和有序结果的运行总计

c# - 使用 C# 任务从 SQL 获取行

c# - TransactionScope 检查事务是否提交正常