2

たとえば、2 つの数値配列があり、各要素が加算された 3 番目の配列を生成しdouble[] a, bたい場合、ループで実行できます。ab

double[] a, b, c
// fill in a, b and initialize c
for(int i=0; i<c.Length; i++)
{
    c[i] = a[i] + b[i];
}

問題は次のとおりです。ループの代わりに LINQ を使用する方法はありますか?

PS。すでに二項演算子があるとしますFunc<double,double,doube> add = (x,y)=>x+y;

4

2 に答える 2

5

メソッドが必要なようですZip

var result = a.Zip(b, add).ToArray();

(もちろん、これはまだ内部的にループしますが、コード内ではループしません。)

編集:Zipは .NET 4 以降でのみ使用できますが、このトピックに関する Eric Lippert のブログ投稿にはサンプル ソース コードが含まれています... または、私の Edulinq 実装を使用できます(対応するブログ投稿を参照してください)。

于 2013-03-07T05:14:46.673 に答える
4

これを実現する別の方法は次のとおりです。

c = a.Select((x, i) => x + b[i]).ToArray();

これはLINQSelect拡張メソッドのオーバーロードでFunc<TSource, int, TResult> あり、int引数はTSource要素のインデックスです。このようにして、これを使用してbのi番目の要素にもアクセスできb.Length >= a.Lengthますが、そうでない場合は、で終わる可能性がありIndexOutOfRangeExceptionます。

お役に立てば幸いです;)

于 2013-03-07T06:03:11.650 に答える