[英]How do I join an array by addition operation in C#?
我有兩個數組定義,我想逐個元素進行加法運算而不進行循環操作? 例如:
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];
}
但是我不想使用循環操作。
您可以使用Enumerable.Zip
:
decimal[] zz = xx.Zip(yy, (x, y) => x + y).ToArray();
var zz = xx.Select((x, i) => x + yy[i]).ToArray();
您可以使用LINQ:
var zz = Enumerable
.Range(0, (int)Math.Min(xx.Length, yy.Length))
.Select(i => xx[i] + yy[i])
.ToArray();
但這實際上只是在移動幕后的循環。
在Zip
旁邊使用Enumerable.Range的另一種方式:
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];
}
或更緊湊但可讀性較低的版本:
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();
如果它們是全局范圍的數組,則可以使用遞歸
public void add(int index){
zz[index] = xx[index] + yy[index];
if(index < xx.Length){
add(index+1);
}
}
是偽代碼,未經測試,但代表一般想法。 讓我知道你的想法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.