Zipper (2)
昨日かけなかったの。
// code formatted by http://manoli.net/csharpformat/ public class Zipper2<T, U> { private readonly T t; private readonly U u; private Zipper2(T t, U u) { this.t = t; this.u = u; } public T First { get { return t; } } public U Second { get { return u; } } public static IEnumerable<Zipper2<T, U>> GetEnumerator(IEnumerator<T> t, IEnumerator<U> u) { // 双方のポイントする位置を一致させるため && ではなく & を使う。 while (t.MoveNext() & u.MoveNext()) { yield return new Zipper2<T, U>(t.Current, u.Current); } } public static IEnumerable<Zipper2<T, U>> GetEnumerator(IEnumerable<T> t, IEnumerable<U> u) { foreach (Zipper2<T, U> z in GetEnumerator(t.GetEnumerator(), u.GetEnumerator())) { yield return z; } }
超つまんない。Zipper3, Zipper4,, と作るとアホらしくなる。LCG じゃ GetEnumerator(params IEnumerator[] e) は作れても、値を保持する側の型が作れないしなー。