选择数组中值大于阈值的索引

3
我有一个double数组和一个阈值。我想选择数组中第一个大于该阈值的索引。
如何使用LINQ实现?
我使用以下代码得到了结果:
var n = acc_avg.Select((val, index) => new {Val = val, Index = index})
               .Where(l => l.Val > threshold)
               .First()
               .Index

但是有没有更好的方法呢?


你还想要多简单?你已经从大数组中选择了一个新的数组,然后应用了你的where条件。你是想获取一个聚合的最大值吗? - Joel Etherton
2个回答

5
你可以使用 Array.FindIndex
var n = Array.FindIndex(acc_avg, x => x > threshold);

即使是像这样简单的东西,也最好附上解释和代码。 - jcaruso

2

我认为你的解决方案看起来相当不错,但是如果序列中没有符合条件的元素,它会抛出异常。我建议使用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);  

但是你可能已经知道了。 :)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接