1

重複の可能性:
LINQ Partition List to Lists of 8
members

多くのアイテムのリストと、それらの同じアイテムの短いリストでうまく機能するメソッドがあります。

LINQ を使用して、大きなリストから N 個の要素を取り出し、一度に N 個ずつメソッドに渡すことはできますか? 「int i = 0;」を作成することなく、これを行うエレガントな方法があると確信しています。変数。

はっきりさせておきますが、foo.Take(10) がリストから 10 個の項目を削除することはわかっています。しかし、次の 10 個のセット、次の 10 個のセットなどを処理し続ける必要があります。擬似コードは次のようになります。

var shortList = BigList.NiceMethod(10);
foreach (shorty in shortlist)
{
  Method(shorty);
}

これはおそらくグループ通話です。

4

3 に答える 3

3

これにより、すべてのリストに最大N個の要素があるリストのリストが表示されます。

int N = 3;
List<int> list = new List<int>() { 1, 2, 3, 4, 5, 6, 7, 8, 9 };

var ListOfLists = list.Select((x, inx) => new { Item = x, Group = inx / N })
                        .GroupBy(g => g.Group, g => g.Item)
                        .Select(x => x.ToList())
                        .ToList();

MorelinqのBatchメソッドを使用することもできます

var ListOfLists2 = list.Batch(3).Select(x => x.ToList()).ToList();
于 2012-11-01T18:53:07.633 に答える
3

IEnumerable<T>メソッドに を渡してを使用できますEnumerable.Take

var part = items.Take(10);
method(part);

Skip次の部分では、 +を使用できますTake

var part = items.Skip(10).Take(10);
method(part);

別のオプション: n 個のパケットEnumerable.GroupByに剰余演算子を使用します。%

int groupCount = 5;
var parts = items.GroupBy(i => i % groupCount);
foreach (var p in parts)
    method(p);

編集:シーケンスを同じサイズの小さなシーケンスに分割する必要がある場合は、この拡張機能を使用できます:

public static IEnumerable<IEnumerable<T>> Batch<T>(this IEnumerable<T> collection, int batchSize)
{
    List<T> nextbatch = new List<T>(batchSize);
    foreach (T item in collection)
    {
        nextbatch.Add(item);
        if (nextbatch.Count == batchSize)
        {
            yield return nextbatch;
            nextbatch = new List<T>(batchSize);
        }
    }
    if (nextbatch.Count > 0)
        yield return nextbatch;
}
于 2012-11-01T18:49:26.217 に答える
0

これは私のために働く

    var l = Enumerable.Range(0, 1000).ToList<int>();
        int size = 11;
        var result = Enumerable.Range(0, l.Count / size + 1)
            .Select(p => l.Skip(p * size).Take(Math.Min(size, l.Count - size * p)).ToList())
            .Where(p=>p.Count > 0).ToList();
于 2012-11-01T19:10:25.273 に答える