2011-09-09 68 views
28

我遇到這感覺就像是有一個簡單的解決方案,如果我找到合適的LINQ方法純屬假設的問題...添加/總結兩個數組

我有個整數的兩個數組,我知道他們是相同的尺寸。我想創建第三個數組的大小相同的位置,其中第三個數組中的元素是相應位置前兩個數組中元素的總和。

下面是一個應該顯示我想要做什麼的方法。

public static int[] AddArrays(int[] a, int[] b) 
{ 
    int[] newArray = new int[a.Length]; 
    for (int i = 0; i<a.Length; i++) 
    { 
     newArray[i]=a[i]+b[i]; 
    } 
    return newArray; 
} 

有沒有我可以使用像

return a.DoStuff(b, (x,y) => x+y) 

或類似的東西,任何LINQ的方法呢?

我應該注意,這可能屬於家庭作業的範疇,因爲原始問題來自我正在查看的網站(儘管我找不到問題的直接鏈接),而不是我需要的問題工作或任何事情。

如果沒有簡單的方法存在,那麼Linqy最好的方法是什麼?一個array.each似乎有問題,無法輕鬆地索引第二個數組,以將值添加到您正在迭代的值,導致我懷疑Linq在那種情況下是否會有任何幫助......

+1

僅供參考,這通常被稱爲「拉鍊」(拉鍊比喻應該是顯而易見的)和LINQ有它沒有內置的支持,也許除了通過'SelectMany'。 /編輯在當前版本中顯然不再是真實的。 –

+0

Zip這些傢伙已經回答僅適用於.NET 4 – Zenwalker

+0

@zenwalker:是的,這就是爲什麼更好地升級Framework版本儘快,非常整潔的功能;) – sll

回答

41

郵編吧:)

var a = new int[] {1,2,3 }; 
var b = new int[] {4,5,6 }; 
a.Zip(b, (x, y) => x + y) 
+0

真棒,感謝您的展示! – Austin

1
IList<int> first = new List<int> { 2, 3, 4, 5 }; 
IList<int> second = new List<int> { 2, 3, 4, 5 }; 

var result = Enumerable.Zip(first, second, (a, b) => a + b); 
10

您可以使用選擇方法。

int[] a = new[] { 1, 2, 3 }; 
int[] b = new[] { 10, 20, 30 }; 

var c = a.Select ((x, index) => x + b[index]).ToArray(); 
+1

誰會通過然後遞增索引? – sll

+3

該索引由LINQ進程提供。 –

+0

謝謝,不錯的功能! – sll

4
public static int[] AddArrays(int[] a, int[] b) 

{ 
    return a.Zip(b, (x,y) => x+y).ToArray(); 
}