c# - LINQ查询如何在开始和结束索引之间选择最大值以及最大值的索引

标签 c# linq

int[] num = {1,2,3,4,5,6,7,8,9,8,7,6,5,4,3,2,1};

如何使用 LINQ 获取索引 3 和索引 8 之间的最大值和最大值的索引?

最佳答案

您可以使用:

var info = num.Select( (i, ind) => new {Value=i, Index=ind}).Skip(3).Take(6)
              .OrderByDescending(p => p.Value).First();

Console.WriteLine("Value {0} at Index {1}", info.Value, info.Index);

您还可以使用聚合:

var info = num.Select( (i, ind) => new {Value=i, Index=ind}).Skip(3).Take(6)
              .Aggregate((a, b) => b.Value > a.Value ? b : a);

如果您使用 MoreLinq's MaxBy(),这可以简化或类似的例程更好一些:

var info = num.Select( (i, ind) => {Value=i, Index=ind}).Skip(3).Take(6)
              .MaxBy(p => p.Value);

关于c# - LINQ查询如何在开始和结束索引之间选择最大值以及最大值的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8661448/

相关文章:

c# - 从 C++ 到 C# 重写串口通信

c# - 实例化要在类库中使用的委托(delegate)方法

c# - 使用 LINQ 拆分字符串

c# - Linq 查询从对象 B 中获取与对象 A 具有相同名称和类型的属性

linq - 比较两个不同的列表

c# - 有关用于过滤集合的 LINQ 查询的建议

c# - Visual Studio 2008 关于更改设计器生成的代码的警告

c# - 为什么在不应该抛出该异常时抛出该异常?

c# - LINQ to Entities Any() 和 Contains() 列表较小,速度较慢

c# - LINQ(到对象),在同一个 IEnumerable 上运行多个查询?