はじめに
Pythonの zip(a, b)
は、C#だと a.Zip(b, Tuple.Create)
です。
Pythonの zip(a, b, c)
は、C#にはたぶん用意されていない。なぜだ。不便だ。
無いなら作ろう
できた。
public static class MoreMoreEnumerable
{
public static IEnumerable<T[]> Zip<T>(this IEnumerable<IEnumerable<T>> sources)
{
var enumerators = sources.Select(_ => _.GetEnumerator()).ToArray();
while (enumerators.All(_ => _.MoveNext()))
yield return enumerators.Select(_ => _.Current).ToArray();
}
}
使用例
var a = new[] { 1, 2, 3 };
var b = new[] { 4, 5, 6 };
var c = new[] { 7, 8, 9 };
int[][] abc = new[] { a, b, c }.Zip().ToArray();