gpt4 book ai didi

c# - 我可以在 LINQ 中获取两个 IEnumerables 的增量吗?

转载 作者:太空狗 更新时间:2023-10-29 18:21:12 34 4
gpt4 key购买 nike

不是聚合增量,而是每个元素的增量。下面是一些代码来解释我的意思:

var deltaTotals = _deltaEnumerable.Select(a => a.Amount).ToList();
var oldTotals = _totalsEnumerable.Select(d => d.Amount).ToList();

// trigger change in _totalsEnumerable

// ** can LINQ do the lines below
var newTotals = totalsEnumerable.Select(d => d.Amount);
for (var i = 0; i < 7; i++) {
var newAmount = oldTotals[i] - deltaTotals[i];
Assert.That(newTotals.ElementAt(i), Is.EqualTo(newAmount));
}

最后四行代码似乎在 LINQ 中可能有更优雅的方式。

干杯,
贝瑞尔

最佳答案

你想要的是Enumerable.Zip扩展方法。

一个示例用法是:

var delta = oldTotals.Zip(newTotals, (o, n) => n.Amount - o.Amount);

请注意,这是 .NET 4.0 的新功能。在 .NET 3.5 中,您必须编写自己的扩展。像这样:

public static IEnumerable<TResult> Zip<TFirst, TSecond, TResult>(
this IEnumerable<TFirst> first,
IEnumerable<TSecond> second,
Func<TFirst, TSecond, TResult> resultSelector)
{
using (var firstEnumerator = first.GetEnumerator())
using (var secondEnumerator = second.GetEnumerator())
{
while ((firstEnumerator.MoveNext() && secondEnumerator.MoveNext()))
{
yield return resultSelector(firstEnumerator.Current,
secondEnumerator.Current);
}
}
}

关于c# - 我可以在 LINQ 中获取两个 IEnumerables 的增量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2352379/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com