在c#中将列表分割为子列表

本文关键字:列表 分割 | 更新日期: 2023-09-27 18:17:05

我喜欢将列表拆分为多个列表,列表包含GUID。例如,如果主列表包含130个GUID,我将阈值设置为50,因此它应该返回,3列表,1和2列表应分别包含50个列表,第三列表将包含30个GUID。

我们怎么做呢?请帮帮我!!

在c#中将列表分割为子列表

您可以使用此代码。这里我使用字符串来演示,你可以使用你的guid

var list = new List<string> { "a", "b", "c", "d", "e" };
var threashold = 2;
var total = list.Count();
var taken = 0;
var sublists = new List<List<string>>(); //your final result
while (taken < total)
{
    var sublst = list.Skip(taken)
        .Take(taken + threashold > total ? total - taken : threashold)
        .ToList();
    taken += threashold;
    sublists.Add(sublst);
}

您可以使用以下LINQ查询:

 // your sample list
 List<Guid> guids = Enumerable.Range(0, 130).Select(i => Guid.NewGuid()).ToList();
 List<List<Guid>> splitted = guids
    .Select((guid, index) => new { guid, index })
    .GroupBy(x => x.index / 50)
    .Select(g => g.Select(x => x.guid).ToList())
    .ToList();

基本方法是Enumerable.GroupBy,按指数/50对它们进行分组。因为整数除法截断小数部分,所以得到50个一组

您可以使用Jon Skeet编写的MoreLinq:Google代码(可在nuget上获得)

您正在寻找的方法是Batch:

using MoreLinq
...
IEnumerable<IEnumerable<Guid>> result = enumerableGuids.Batch(50);