我可以使用LINQ以数字方式添加两个数组的值吗?

时间:2013-03-07 05:12:03

标签: c# linq vector operators

如果我有两个数字数组,例如double[] a, b,我想生成第三个数组,每个元素都添加ab我可以用循环来完成

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 个答案:

答案 0 :(得分: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

答案 1 :(得分:4)

实现这一目标的另一种方法是:

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

这是LINQ Select扩展方法的重载,需要Func<TSource, int, TResult> 其中int参数是TSource元素的索引。这样您就可以使用它来访问b的第i个元素,但仅限于b.Length >= a.Length,否则您最终会得到IndexOutOfRangeException

希望有所帮助;)