假设
List<int> diff(List<int> a, List<int> b)
{
// assume same length lists
List<int> diff= new List<int>(a.Count);
for (int i=0; i<diff.Count; ++i)
{
diff[i] = a[i] - b[i];
}
return diff;
}
我希望某种形式的单行代码执行相同的操作,或者使用lambda进行某些操作,而不是重写所有样板代码。
例如,在python中,可以是
[ai-bi for ai,bi in zip(a,b)]
甚至
np.array(a) - np.array(b)
有没有很好的方法用C#编写此代码?我所有的搜索都找到了删除或添加列表元素的方法,但没有关于元素操作的方法。
答案 0 :(得分:3)
Linq也具有Zip
方法:
var diff = a.Zip(b, (ai, bi) => ai - bi);
请注意,您代码中的一个潜在错误是,如果b
的元素少于a
,那么当您尝试访问b
范围之外的元素时,您将得到一个异常。 。只要两个集合都具有项目,Zip
将仅返回项目,这实际上是两个集合长度中较短的一个。