2012-10-05 123 views
0

我有兩個數組定義,我想要做元素的加法操作沒有循環操作?例如:如何通過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]; 
} 

但我不想使用循環操作。

+3

爲什麼你想擺脫循環? – Rob

+1

爲什麼每個循環執行3次加法? –

回答

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(); 
9

您可以使用Enumerable.Zip

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

在.net3.5 – Habibillah

+1

上無法正常工作...但在.net 3.5中爲.Zip編寫替代品很簡單:http://www.blackwasp.co.uk/LinqZip35.aspx – spender

2

你可以使用LINQ:

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

但是這真的只是移動循環幕後的。

+0

這是最好的方法對於.NET 3.5,因爲'Enumerable.Zip'需要.NET 4.0。 –

+0

如果'xx'大於'yy',將導致'IndexOutOfRangeException'。 –

+0

乾杯蒂姆,固定。 – Rawling

0

如果他們是全局範圍數組,你可以使用遞歸

public void add(int index){ 

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

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

    } 

} 

是僞代碼,未經測試,但表示總體思路。讓我知道你的想法。

+0

因爲這是迄今爲止唯一不使用循環的答案,所以我不認爲它值-1:p – Rawling

+0

謝謝!我不能保證它的最優性,但希望它能滿足簡短的要求! – ComethTheNerd

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

+1,使用'Select'的巧妙方法# –

+0

如果'xx'大於'yy',將導致'IndexOutOfRangeException'。 –

+1

@TimSchmelter和'Zip'會輕易忽略它。好點嗎? –

2

使用Enumerable.Range旁邊Zip另一種方式:

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

[第二個參數是一個計數,而不是最大值](http://msdn.microsoft.com/en-us/library/system.linq.enumerable.range.aspx)。 – Rawling

+0

@Rawling:對不起,我沒有明白你的意思 –

+0

這段代碼將返回一個數組少一個元素而不是'xx'的數組。 – Rawling