如何使用LINQ在2D集合中转换尺寸?

jee*_*ebs 15 c# linq

考虑以下结构:

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)

  • +1我笑了,名为`recursive`的用户没有提供递归解决方案= D. (4认同)