2

double の配列としきい値があります。インデックスの値がしきい値よりも大きい、配列内の最初のインデックスを選択したいと思います。

でそれを達成するにはどうすればよいLINQですか?

私はそれを動作させるようになりました:

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

しかし、より良い方法はありますか?

4

2 に答える 2

4

使用できますArray.FindIndex

var n = Array.FindIndex(acc_avg, x => x > threshold);
于 2012-11-29T15:51:29.237 に答える
2

あなたのソリューションは私にはかなりまともに見えますが、シーケンスに基準を満たす要素がない場合、例外がスローされると思います。First の代わりに FirstOrDefault を検討し、アクセスする前に 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);  

しかし、あなたはおそらくそれを知っていました。:)

于 2012-11-29T16:00:59.610 に答える