2012-11-29 50 views
1

我有一個雙精度數組和一個閾值。 我想選擇索引中的值大於閾值的數組中的第一個索引。選擇具有大於閾值的數組的索引

如何在LINQ中完成該操作?

我得到它一起工作:

var n = acc_avg.Select((val, index) => new {Val = val, Index = index}) 
       .Where(l => l.Val > threshold) 
       .First() 
       .Index 

但是否有更好的辦法?

+0

你可能想要多少簡單?您已經從較大的陣列中選擇一個新陣列,然後應用您的位置條件。你是否試圖獲得最大總值或某物? –

回答

3

您可以使用Array.FindIndex

var n = Array.FindIndex(acc_avg, x => x > threshold); 
1

你的解決方案看起來相當不錯的給我,但我相信,如果有序列中的元素符合條件的,將拋出異常。我會考慮FirstOrDefault而不是First,並在訪問之前測試null。

var n = acc_avg.Select((val,index) => new {Val= val, Index = index}).Where(l=> l.Val > threshold).FirstOrDefault();  
if(n != null) 
    DoSomething(n.Index); 

當然,如果你的對象已經有一個索引屬性(或者如果序列中的位置是不是對你很重要),你可以縮短這:

var n = acc_avg.FirstOrDefault(l => l > threshold); 

但你可能知道那。 :)

相關問題