如何添加两个列表的内容
本文关键字:列表 两个 何添加 添加 | 更新日期: 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;
}
}
}