如何通过C#中的加法操作加入数组?

时间:2012-10-05 07:58:00

标签: c# arrays

我有两个数组定义,我想在没有循环操作的情况下逐个元素地执行加法运算?例如:

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];
}

但我不想使用循环操作。

6 个答案:

答案 0 :(得分:9)

您可以使用Enumerable.Zip

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

答案 1 :(得分:3)

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

答案 2 :(得分:2)

您可以使用LINQ:

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

但这真的只是在幕后推动循环。

答案 3 :(得分:2)

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

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

答案 4 :(得分: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();

答案 5 :(得分:0)

如果它们是全局范围的数组,则可以使用递归

public void add(int index){

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

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

   }

}

psuedo-code,未经测试,但代表一般的想法。让我知道你的想法。