0

2つの配列定義があり、ループ操作なしで要素ごとに加算操作を実行したいですか?例えば:

decimal[] xx = { 1, 2, 3 };
decimal[] yy = { 6, 7, 8 };

私が望む結果は次のとおりです。

decimal[] zz = { 7, 9, 11 };

加算操作は簡単です。次のような要素ごとに1つずつ追加するだけです

decimal[] zz = decimal[xx.Length];
for (int i=0; i<xx.Length;i++){
   zz[i] =xx[i] + yy[i];
}

しかし、私はループ操作を使いたくありません。

4

6 に答える 6

9

あなたが使用することができますEnumerable.Zip

decimal[] zz = xx.Zip(yy, (x, y) => x + y).ToArray();
于 2012-10-05T08:01:45.920 に答える
3
  var zz = xx.Select((x, i) => x + yy[i]).ToArray();
于 2012-10-05T08:02:46.797 に答える
2

LINQを使用できます。

var zz = Enumerable
             .Range(0, (int)Math.Min(xx.Length, yy.Length))
             .Select(i => xx[i] + yy[i])
             .ToArray();

しかし、それは実際にはループを舞台裏で動かしているだけです。

于 2012-10-05T08:01:57.807 に答える
2

横にあるEnumerable.Rangeを使用する別の方法Zip

var result = Enumerable.Range(0, xx.Length)
                       .Select(i => xx[i] + yy[i])
                       .ToArray();
于 2012-10-05T08:04:46.227 に答える
2

なんらかの方法でループせずにそれを行うことはできません。

配列の作成とループは次のようになります。

decimal[] zz = new decimal[xx.Length];
for (int i = 0; i < xx.Length; i++){
   zz[i] = xx[i] + yy[i];
}

または、よりコンパクトですが、やや読みにくいバージョン:

decimal[] zz = new decimal[xx.Length];
for (int i = 0; i < xx.Length; zz[i++] = xx[i] + yy[i]);

Linq拡張機能を使用してループを実行することもできます。

decimal[] zz = xx.Select((x, i) => x + yy[i]).ToArray();

または:

decimal[] zz = Enumerable.Range(0, xx.Length).Select(i => xx[i]+yy[i]).ToArray();
于 2012-10-05T08:06:16.420 に答える
0

それらがグローバルスコープの配列である場合は、再帰を使用できます

public void add(int index){

  zz[index] = xx[index] + yy[index];

  if(index < xx.Length){
     add(index+1);

   }

}

疑似コードであり、テストされていませんが、一般的な考え方を表しています。あなたの考えを聞かせてください。

于 2012-10-05T08:02:04.983 に答える