考虑以下结构:
IEnumerable<IEnumerable<int>> collection = new[] {
new [] {1, 2, 3},
new [] {4, 5, 6},
new [] {7, 8, 9}
};
Run Code Online (Sandbox Code Playgroud)
如何枚举此集合,以便获取IEnumerable<int>由第一项,第二项等组成的集合?
也就是说,{1,4,7},{2,5,8},......
(虽然我选择的实现是int[]对象,假设你只有IEnumerable<int>功能.谢谢.)
rec*_*ive 20
这是一种使用生成器而不是递归的方法.阵列构造也较少,因此可能更快,但这完全是猜想.
public static IEnumerable<IEnumerable<T>> Transpose<T>(
this IEnumerable<IEnumerable<T>> @this)
{
var enumerators = @this.Select(t => t.GetEnumerator())
.Where(e => e.MoveNext());
while (enumerators.Any()) {
yield return enumerators.Select(e => e.Current);
enumerators = enumerators.Where(e => e.MoveNext());
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2442 次 |
| 最近记录: |