两个数字列表之间的C#元素明智差异

时间:2019-10-11 15:30:52

标签: c# list dictionary reduce

假设

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#编写此代码?我所有的搜索都找到了删除或添加列表元素的方法,但没有关于元素操作的方法。

1 个答案:

答案 0 :(得分:3)

Linq也具有Zip方法:

var diff = a.Zip(b, (ai, bi) => ai - bi);

请注意,您代码中的一个潜在错误是,如果b的元素少于a,那么当您尝试访问b范围之外的元素时,您将得到一个异常。 。只要两个集合都具有项目,Zip将仅返回项目,这实际上是两个集合长度中较短的一个。