如果我有两个数字数组,例如double[] a, b
,我想生成第三个数组,每个元素都添加a
和b
我可以用循环来完成
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;
答案 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
。
希望有所帮助;)