Enumerable.Pairwise


ここでPairwiseは、
1,2,3,...
のようなシーケンスに対して、隣り合う2つを組にして
(1,2),(2,3),(3,4),...
というシーケンスを返す関数のことです。

これは.NET標準のEnumerableクラスにはありませんが、次のように書けます。

// seq は IEnumerable<T>, seq2 は IEnumerable<Tuple<T,T>>
var seq2 = seq.Zip(seq.Skip(1), Tuple.Create);

よく忘れるのでメモ。拡張メソッドにするならこんな感じ?

public IEnumerable<TResult> Pairwise<T, TResult>(this IEnumerable<T> e, Func<T, T, TResult> resultSelector)
{
    return e.Zip(e.Skip(1), resultSelector);
}