2012-11-29 108 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); 

但你可能知道那。 :)

相关问题