【发布时间】:2021-09-29 01:53:41
【问题描述】:
给定一个IEnumerable<DateTime>,有没有办法使用LINQ 计算DateTime 对象的后续元素之间差异的平均值?
编辑:我意识到我原来的措辞有点不清楚。澄清一下,我希望平均元素 0 和 1、1 和 2、2 和 3 等之间的差异。
double GetAvgDiffInMilliseconds(IEnumerable<DateTime> items)
=> items.Aggregate(/* ??? */).Average(); // is this possible with LINQ?
注意:我对非 LINQ 解决方案不感兴趣,因为这个问题可以通过循环和累加器轻松解决。出于学习目的,我想了解 LINQ 是否可以做到这一点。
【问题讨论】:
-
LINQ 操作使用迭代器和 IEnumerable。你问的是一个使用当前和上一个项目的运算符,例如MoreLINQ's Pairwise 运算符。其他任何东西都会贵很多
-
要让
Aggregate工作,您必须传输一个值,例如一个元组,其中包含以前的日期、计数和差的总和作为累加器。Aggregate的主体必须增加计数,计算前一个值和当前值之间的差异,并发出一个新的元组,其中包含增加的计数、当前值和更新的差异总和。最后一步必须将总和除以计数。这非常丑陋而坦率地说,不值得麻烦 -
你的意思是所有可能组合与这些元素的平均距离,还是只是 N N + 1
-
@CSharpie 我的意思是每个后续条目之间差异的平均值,因此 item1 - item0、item2 - item1 等。
-
@CSharpie 根据您的评论,我澄清了我的问题,任何人可能会在未来发现这篇文章有用。谢谢!