3

LINQ を使用して、リストのリストを、各リストが同じインデックスのすべての要素を持つ新しいリストのリストに変換するにはどうすればよいですか。

例えば

l[0] = {3,15,22,6}
l[1] = {9,81,52,7}
l[2] = {2,0,32,73}

に変わります

l[0] = {3,9,2}
l[1] = {15,81,0}
l[2] = {22,52,32}
l[3] = {6,7,73}

ありがとう

4

3 に答える 3

8

dtb による回答から、この拡張Transposeメソッドを使用できます(私はそれがより明確であるため、破棄を から に変更しました。そのようなメソッドを使用する必要があるとは思わないのは私だけではありません):Array.ForEachforeachForEach

public static IEnumerable<IList<T>> Transpose<T>(
    this IEnumerable<IEnumerable<T>> source)
{
    var enumerators = source.Select(e => e.GetEnumerator()).ToArray();
    try
    {
        while (enumerators.All(e => e.MoveNext()))
        {
            yield return enumerators.Select(e => e.Current).ToArray();
        }
    }
    finally
    {
        foreach (var enumerator in enumerators)
            enumerator.Dispose();
    }
}

// e.g. 
IList<IList<int>> l = new int[3][];
l[0] = new []{0,1,2,3};
l[1] = new []{4,5,6,7};
l[2] = new []{8,9,10,11};
l = l.Transpose().ToList();
// l is { { 0, 4, 8 }, { 1, 5, 9 }, { 2, 6, 10 }, { 3, 7, 11 } }
于 2013-10-15T13:28:25.560 に答える