擅长:python、mysql、java
<p>最近有人问我这里的一个<a href="https://stackoverflow.com/questions/2352379/can-i-get-the-delta-of-two-ienumerables-in-linq/2352450#2352450">question</a>,我用<code>Zip</code>扩展方法回答了这个问题,所以对某些人来说这显然很重要。;)</p>
<p>实际上,这对于<em>数学</em>算法来说是一个相当重要的操作-矩阵、曲线拟合、插值、模式识别等等。在诸如数字信号处理这样的工程应用中也非常重要,你所做的大部分工作是组合多个信号或对它们应用线性变换-两者都基于样本索引,因此,压缩它。压缩两个序列要比基于某个键对它们进行排序和连接快得多,特别是当您事先知道序列具有相同数量的元素并且顺序相同时。</p>
<p>鉴于我目前的工作,我不能在这里详细说明,但总的来说,这对遥测数据也很有价值——工业、科学,诸如此类。通常情况下,数据的时间序列来自成百上千个点(并行源),您需要在设备上而不是时间上进行聚合,但要在水平方向上进行聚合。在最后,您需要另一个时间序列,但要包含所有单独点的总和或平均值或其他聚合值。</p>
<p>它可能听起来像是SQL Server中的一个简单排序/组/连接(例如),但实际上很难这样做。首先,时间戳可能不完全匹配,但您不关心几毫秒的差异,因此您最终必须生成一个代理项键/行号和组,当然,代理项行号只不过是您已经拥有的时间<em>索引</em>。压缩是简单、快速和无限并行的。</p>
<p>我不知道我是否会称之为基础性的,但它是重要的。我也不经常使用<code>Reverse</code>方法,但出于同样的原因,我很高兴我不必在我确实需要它的时候自己继续写。</p>
<p>其中一个对您来说似乎没有用处的原因是.NET/C#3.5没有元组。C#4 <a href="http://www.davidhayden.me/2009/12/tuple-in-c-4-c-4-examples.html" rel="noreferrer">does have tuples</a>,当您使用元组时,压缩实际上是一个基本操作,因为顺序是严格执行的。</p>