10

環境

  • アイテムのリスト(または任意の長さ)があります。特定のサイズの「チャンク」にグループ化したい
  • 例: 私は 12 人の顧客 [0,1,2,3,4,5,6,7,8,9,10,11] を持っており、[0,1,2,3 を与える 5 つの themin チャンクをグループ化したい,4] [5,6,7,8,9] [10,11]
  • 注: 実際には、私は顧客と協力したり、単調に増加する整数を扱ったりしていません。質問を簡単にするためにそれを選びました

私の質問

このグループ化を実行する簡単な LINQ クエリ (クエリ構文を使用) を作成するにはどうすればよいですか?

バックグラウンド

  • たとえば、値でグループ化するためにLINQ構文を使用する方法(顧客IDで売上をグループ化する)にはすでに精通していますが、LINQを使用して「チャンク」をきれいに/エレガントに表現する方法に途方に暮れています。簡単な方法でさえ可能かどうかはわかりません。
  • LINQ 構文を使用せずに、プレーン オールド C# でソリューションを実装できますし、既に実装しています。したがって、私の問題はこの質問でブロックされていませんが、LINQでそれを表現する方法を探しています(これもきれいでエレガントです)
4

4 に答える 4

11

(index/chunkSize) でグループ化できます。例:

    var result =
        from i in array.Select((value, index) => new { Value = value, Index = index })
        group i.Value by i.Index / chunkSize into g
        select g;
于 2009-08-11T02:21:12.673 に答える
4

LINQ メソッド (ラムダ式を使用) を好む人のために、変換されたDimitriy Matveev の回答を次に示します。

var result = array
    .Select((value, index) => new { Value = value, Index = index })
    .GroupBy(i => i.Index / chunkSize, v => v.Value);

valueの代わりに ,の配列だけが必要な場合はIGrouping<T1, T2>、次を追加します。

.Select(x => x.ToArray())
于 2014-07-17T22:16:30.360 に答える