我可以用LINQ将两个数组的数值相加吗?

本文关键字:数组 两个 LINQ 我可以 | 更新日期: 2023-09-27 18:02:35

如果我有两个数字数组,例如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而不是循环?

p。假设我已经有一个二进制运算符Func<double,double,doube> add = (x,y)=>x+y;

我可以用LINQ将两个数组的数值相加吗?

听起来你只是想要Zip方法:

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

(当然,这仍然会在内部循环-但不是在您的代码中。)

编辑:Zip仅在。net 4及以上版本中可用,但Eric Lippert关于该主题的博客文章包含示例源代码…或者您可以使用我的Edulinq实现(参见相应的博客文章)。

另一种方法是:

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

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

希望有帮助;)