我有两个数组定义,我想在没有循环操作的情况下逐个元素地执行加法运算?例如:
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];
}
但我不想使用循环操作。
答案 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,未经测试,但代表一般的想法。让我知道你的想法。