Dykam提到的Zip使我知道這個代碼:
public static class EnumerableExtensions
{
public delegate bool EqualityComparison<in T1, in T2>(T1 x, T2 y);
public delegate bool EqualityComparison<in T>(T x, T y);
public static IEnumerable<T> CommonPrefix<T>(
this IEnumerable<T> xs,
IEnumerable<T> ys)
{
return CommonPrefix(xs, ys, EqualityComparer<T>.Default.Equals);
}
public static IEnumerable<T> CommonPrefix<T>(
this IEnumerable<T> xs,
IEnumerable<T> ys,
EqualityComparison<T> eq)
{
IEnumerator<T> x = xs.GetEnumerator();
IEnumerator<T> y = ys.GetEnumerator();
while (x.MoveNext() && y.MoveNext() && eq(x.Current, y.Current))
{
yield return x.Current;
}
}
public static IEnumerable<TResult> CommonPrefix<T1, T2, TResult> (
this IEnumerable<T1> xs,
IEnumerable<T2> ys,
EqualityComparison<T1, T2> eq,
Func<T1, T2, TResult> selector)
{
IEnumerator<T1> x = xs.GetEnumerator();
IEnumerator<T2> y = ys.GetEnumerator();
while (x.MoveNext() && y.MoveNext() && eq(x.Current, y.Current))
{
yield return selector(x.Current, y.Current);
}
}
}
嗯,4.0得到這個Zip。像x.Zip(y).TakeWhile(t => t.Item1 == t.Item2).Select(t => t.Item1); – Dykam 2009-11-12 10:11:24
+1 yeah Zip會很好地做到這一點。 – 2009-11-12 10:14:30