2013-03-07 68 views
2

如果我有兩個數字數組,例如double[] a, b和欲產生其中每個元素加入ab我可以用循環做一個第三陣列我可以使用LINQ在數值上添加兩個數組的值嗎?

double[] a, b, c 
// fill in a, b and initialize c 
for(int i=0; i<c.Length; i++) 
{ 
    c[i] = a[i] + b[i]; 
} 

所以,問題是;有沒有辦法處理LINQ而不是循環?

PS。假設我已經有一個二元運算Func<double,double,doube> add = (x,y)=>x+y;

回答

2

另一種方式來實現,這是:

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

這是LINQ選擇擴展方法的重載,這需要Func<TSource, int, TResult> 其中int參數是TSource元素的索引。通過這種方式,您可以使用它訪問b的第i個元素,但前提是b.Length >= a.Length,否則最終可能會產生IndexOutOfRangeException

希望有幫助;)

+0

謝謝,這是我想要的,因爲我使用VS2008。 – ja72 2013-03-07 13:32:13

5

這聽起來像你只是想Zip方法:

var result = a.Zip(b, add).ToArray(); 

(當然,這個內部還是會循環 - 但不是在你的代碼)

編輯:Zip僅適用於.NET 4及更高版本,但Eric Lippert's blog post on the topic包含示例源代碼...或者您可以使用my Edulinq implementation(請參閱corresponding blog post)。

+0

'add'會像'(a,b)=> a + b'嗎? – 2013-03-07 05:18:53

+0

僅限於.NET 4嗎?否則,這正是我想要的。 – ja72 2013-03-07 05:24:54

+1

@ ja72:看起來像是。 NET 4+。這可能對你有所幫助:http://www.blackwasp.co.uk/LinqZip35.aspx – 2013-03-07 05:28:39

相關問題