在c#中将列表分割为子列表
本文关键字:列表 分割 | 更新日期: 2023-09-27 18:17:05
我喜欢将列表拆分为多个列表,列表包含GUID。例如,如果主列表包含130个GUID,我将阈值设置为50,因此它应该返回,3列表,1和2列表应分别包含50个列表,第三列表将包含30个GUID。
我们怎么做呢?请帮帮我!!
您可以使用此代码。这里我使用字符串来演示,你可以使用你的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);