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

时间:2011-12-28 21:18:45

标签: c# linq

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

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

2 个答案:

答案 0 :(得分:3)

您可以使用:

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);

您也可以使用Aggregate

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);

答案 1 :(得分:0)

试一试。这不是一个单独的查询,但可能有所帮助。

var max = num.Skip(3).Take(4).Max(); 
var indexOfItem = num.Skip(3).Take(4).First(t => t.Equals(max)); // this is not correct, returns the value not the index.