0

次のような予測不可能な数の 4 番目のパッケージ (それぞれに 4 つのアイテムを含むパック) としてすべてのデータを選択するのが好きです。

foreach(var quaternary in myEnauerable.ToQuaternaryPackages())
{
    //Whatever (Like: l=page.Add(new List()))
    foreach(var item in quaternary)
    {
        //Whatever (Like: l.Add(item))
    }
}
4

5 に答える 5

1

linq を使用すると非常に簡単です。

public static IEnumerable<IEnumerable<T>> Batch<T>(this IEnumerable<T> source, int batchSize)
{
    for (int i = 0; i < source.Count(); i+=batchSize)
    {
        yield return source.Skip(i).Take(batchSize);
    }
}

そうすれば、アイテムのbatchSizeでリストを分割し、アイテムの数がバッチサイズで割り切れない場合、最後の反復で残りの列挙可能値が生成されます。

于 2013-06-12T07:13:35.320 に答える
1

Troy Goode の PagedList ライブラリから恥知らずに盗まれたもの: https://github.com/TroyGoode/PagedList/blob/master/src/PagedList/PagedListExtensions.cs

public static IEnumerable<IEnumerable<T>> Partition<T>(this IEnumerable<T> superset, int pageSize)
{
  if (superset.Count() < pageSize)
    yield return superset;
  else
  {
    var numberOfPages = Math.Ceiling(superset.Count() / (double)pageSize);
    for (var i = 0; i < numberOfPages; i++)
      yield return superset.Skip(pageSize * i).Take(pageSize);  
  }
}

次のように使用します。

var result=myEnumerable.Partition(4);
于 2013-06-12T07:04:23.713 に答える
1

結果を予測不可能(つまり、ランダム) にする必要がある場合は、次のアルゴリズムをお勧めします。

  1. リスト内のすべての要素のランダム順列を作成します。
  2. それらを4つにバケツに入れます。

2番目の部分については、すでに多くの良い答えが提供されています. 最初の部分として、Eric Lippert による LINQ を使用した順列の作成に関する非常に詳細なシリーズがあります。

于 2013-06-12T07:13:06.293 に答える