int[] num = {1,2,3,4,5,6,7,8,9,8,7,6,5,4,3,2,1};
LINQ查詢如何選擇起點和終點指標和最大價值的
如何使用LINQ來獲取最大價值指數和最大值的索引3和索引8之間的指數之間的最大值?
int[] num = {1,2,3,4,5,6,7,8,9,8,7,6,5,4,3,2,1};
LINQ查詢如何選擇起點和終點指標和最大價值的
如何使用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);
你也使用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);
感謝您的幫助 –
優於.OrderByDescending(...)。First()',您可以使用'.Aggregate((a,p)=>(a.Value> p.Value)?a:p) '。 [聚合是專門爲這些類型的場景。](http://msdn.microsoft.com/en-us/library/bb548651.aspx) –
@ScottRippey:好點 - 將添加它。 –
試試看。這不是一個單一的查詢,但可能有所幫助。
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.
感謝您的幫助 –
兩件事:如果你想獲得適當數量的元素,應該採取> 4(6包括8)。其次,'First'將返回項目,而不是項目的索引...上面的代碼將返回9,9,而不是9,8(Take(6))。 –
啊,先說好點()。 –
重複http://stackoverflow.com/questions/8661097/linq-query-how-to-select-max-value-between-start-and-end-index – Adam
沒有,這個問題僅僅是得到最大值,我也希望獲得數組中最大值的索引 –
這個問題包含與您的其他問題幾乎相同的文本。這裏的哲學是*自己嘗試*,發佈一個你嘗試過的例子*以及你想出什麼網絡研究,然後詳細描述你的問題。我沒有看到任何研究工作。 – Adam