2013-03-07 55 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

相关问题