【发布时间】:2015-10-09 09:21:51
【问题描述】:
我喜欢将列表拆分为多个列表,列表包含 GUID。例如,如果主列表包含 130 个 GUID,我将阈值保持为 50,所以它应该返回,3 个列表,第一个和第二个列表应该包含 50 个列表,第三个列表将有 30 个 GUID。
我们该怎么做?请帮帮我!!
【问题讨论】:
-
我强烈建议您在发布问题之前搜索该网站。此问题的相关问题列表显示许多重复项。
标签: c#
我喜欢将列表拆分为多个列表,列表包含 GUID。例如,如果主列表包含 130 个 GUID,我将阈值保持为 50,所以它应该返回,3 个列表,第一个和第二个列表应该包含 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 code(在 nuget 上可用)
你要找的方法是Batch:
using MoreLinq
...
IEnumerable<IEnumerable<Guid>> result = enumerableGuids.Batch(50);
【讨论】: