【问题标题】:Split list in to sublist in C# [duplicate]在C#中将列表拆分为子列表[重复]
【发布时间】:2015-10-09 09:21:51
【问题描述】:

我喜欢将列表拆分为多个列表,列表包含 GUID。例如,如果主列表包含 130 个 GUID,我将阈值保持为 50,所以它应该返回,3 个列表,第一个和第二个列表应该包含 50 个列表,第三个列表将有 30 个 GUID。

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

【问题讨论】:

  • 我强烈建议您在发布问题之前搜索该网站。此问题的相关问题列表显示许多重复项。

标签: c#


【解决方案1】:

您可以使用此代码。这里我使用字符串进行演示,你可以使用你的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);
}

【讨论】:

  • 感谢 Arghya,另一种方法是使用 MoreLinq ... IEnumerable> result = enumerableGuids.Batch(50);
【解决方案2】:

您可以使用以下 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 个组。

【讨论】:

  • 谢谢蒂姆,它的工作,赞赏,但另一种方法是,它可能会有所帮助,使用 MoreLinq ... IEnumerable> result = enumerableGuids.Batch(50);跨度>
【解决方案3】:

您可以使用 Jon Skeet 编写的 MoreLinqgoogle code(在 nuget 上可用)

你要找的方法是Batch:

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

【讨论】:

  • 嗨,这是一种完美的使用方式,我已经通过 Nuget 下载了 MoreLinq,它就像一个魅力!非常感谢,感谢..
猜你喜欢
  • 1970-01-01
  • 2018-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-06
  • 2011-03-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多