0

重複の可能性:
LINQ を使用してリストをサブリストに分割する

入力内の連続する各項目がシーケンス内の次のサブリストにあるように、LINQ を使用して列挙型を 3 つの列挙型に分割する方法を探しています。だから入力

{"a", "b", "c", "d", "e", "f", "g", "h"}

結果として

{"a", "d", "g"}, {"b", "e", "h"}, {"c", "f"}

私はこのようにしましたが、LINQ を使用してこれをよりエレガントに表現する方法があるはずです。

var input = new List<string> {"a", "b", "c", "d", "e", "f", "g", "h"};
var list = new List<string>[3];

for (int i = 0; i < list.Length; i++)
    list[i] = new List<string>();

int column = 0;
foreach (string letter in input)
{
    list[column++].Add(letter);
    if (column > 2) column = 0;
}
4

1 に答える 1

4

これはあなたが探しているものです:(列ごとに分割)以前の投稿に基づいて変更されました

主な違いは、除算の代わりに mod を使用する group by にあります。

また、(「オブジェクト型」コードではなく) 適切な型が返されるように汎用にしました。ジェネリックで型推論を使用できます。

public static IEnumerable<IEnumerable<T>> SplitColumn<T>( IEnumerable<T> source ) {
    return source
        .Select( ( x, i ) => new { Index = i, Value = x } )
        .GroupBy( x => x.Index % 3 )
        .Select( x => x.Select( v => v.Value ).ToList() )
        .ToList();
}
于 2012-07-26T13:36:02.620 に答える