如何添加两个列表的内容

本文关键字:列表 两个 何添加 添加 | 更新日期: 2023-09-27 18:16:13

我有两个IEnumberable<double>列表。

如何使用Linq将一个列表的每个值添加到另一个列表中相同位置的值?

如何添加两个列表的内容

您可以使用Enumerable.Zip来完成:

var results = first.Zip(second, (f,s) => f+s);

请注意,如果列表的长度不相同,则结果将是两个列表中较短的列表的长度(上面写的Zip将把元素相加,直到一个序列结束,然后停止…)

假设两者长度相同,则可以使用Zip而不会丢失任何内容。如果它们的长度不同,则结果长度为最短的列表长度。

first.Zip(second, (a,b) => a+b);

与。net 4 -你可以使用ZIP

var sumList = numbers2.Zip(numbers,
    (first, second) => first+second);

你可以在这里找到。net 3.5的实现

如果您希望让您的输出包含所有元素(或了解Linq的底层将会发生什么),您可以像这样滚动您自己的Zip重载:

public static IEnumerable<T> Zip<T>(IEnumerable<T> first, IEnumerable<T> second, Func<T,T,T> aggregator)
{
    using (var firstEnumerator = first.GetEnumerator())
    using (var secondEnumerator = second.GetEnumerator())
    {
        var movedFirstButNotSecond = false;
        while ((movedFirstButNotSecond = firstEnumerator.MoveNext()) && secondEnumerator.MoveNext())
        {
            yield return aggregator(firstEnumerator.Current, secondEnumerator.Current);
            movedFirstButNotSecond = false;                
        }
        while (movedFirstButNotSecond || firstEnumerator.MoveNext())
        {
            yield return firstEnumerator.Current;
            movedFirstButNotSecond = false;
        }
        while (secondEnumerator.MoveNext())
        {
            yield return secondEnumerator.Current;
        }
    }
}