0

我有两个数组定义,我想逐个元素地进行加法运算而不进行循环操作?例如:

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

我想要的结果是:

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

加法操作很简单。只需为每个元素一一添加,例如

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

如果不以某种方式循环,您将无法做到这一点。

您的数组创建和循环应该是:

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 回答
2

旁边使用Enumerable.Range的另一种方法Zip

var result = Enumerable.Range(0, xx.Length)
                       .Select(i => xx[i] + yy[i])
                       .ToArray();
于 2012-10-05T08:04:46.227 回答
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 回答