如何在C#中通过加法运算连接数组?
我有两个数组定义,我想一个元素一个元素地做加法运算,而不做循环运算?例如:如何在C#中通过加法运算连接数组?,c#,arrays,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];
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];
}
decimal[]zz=decimal[xx.长度];
对于(int i=0;i您可以使用:
您可以使用LINQ:
var zz = Enumerable
.Range(0, (int)Math.Min(xx.Length, yy.Length))
.Select(i => xx[i] + yy[i])
.ToArray();
但这实际上只是在幕后移动循环。如果它们是全局范围的数组,则可以使用递归
public void add(int index){
zz[index] = xx[index] + yy[index];
if(index < xx.Length){
add(index+1);
}
}
public void添加(int索引){
zz[index]=xx[index]+yy[index];
如果(索引
是psuedo代码,未经测试,但代表总体思路。请告诉我您的想法。另一种方式使用旁边的Zip
:
var zz = xx.Select((x, i) => x + yy[i]).ToArray();
var result = Enumerable.Range(0, xx.Length)
.Select(i => xx[i] + yy[i])
.ToArray();
如果没有某种循环,你就无法做到这一点
您的阵列创建和循环应为:
decimal[] zz = new decimal[xx.Length];
for (int i = 0; i < xx.Length; i++){
zz[i] = xx[i] + yy[i];
}
或:
为什么要去掉循环?为什么每个循环执行3次加法???因为这是迄今为止唯一一个不使用循环的答案,我认为它不值得-1:p谢谢!我不保证它的最佳性,但希望它满足简要说明。这段代码将返回比xx
少一个元素的数组。r如果xx
大于yy
@TimSchmelter,则IndexOutOfRangeException
的结果是:明白了,似乎Zip
将是最好的。这是.NET 3.5的最佳方式,因为可枚举.Zip
需要.NET 4.0。如果xx
大于y,将导致IndexOutOfRangeException
y
…但是在.net 3.5中为.Zip编写一个替换项很简单:如果xx
大于yy
,Zip
将忽略它,那么会导致索引自动失效异常,这可能是一个选项,而不是索引器e、 那么这种方法甚至比Enumerable.Zip
还有一个额外的优势。
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]);
decimal[] zz = xx.Select((x, i) => x + yy[i]).ToArray();
decimal[] zz = Enumerable.Range(0, xx.Length).Select(i => xx[i]+yy[i]).ToArray();