【问题标题】:Split List into Sublists [duplicate]将列表拆分为子列表[重复]
【发布时间】:2015-09-17 08:48:54
【问题描述】:

我相信这对你们那里的 LINQ 大师来说是另一个容易的事情。有什么办法可以将一个列表分成几个单独的 Some Object 列表,使用项目索引作为每个拆分的分隔符?

让我举例说明:我有一个List<T>,我需要一个List<List<T>>List<T>[],因此这些结果列表中的每一个都将包含原始列表的一组 3 项(顺序)。

示例:

原始列表:[cat, dog, pane, wolf, pig, sun, queen, fox, x'mas, yak, ice, mark, cold] 结果列表:[[cat, dog, pane], [wolf, pig, sun], [queen, fox, x'mas], [yak, ice, mark], [cold]]

【问题讨论】:

标签: c# linq


【解决方案1】:

只是一种天真的幻想:

var animals = new[] { "cat", "dog", "pane", "wolf", "pig", "sun", "queen", "fox", "x'mas", "yak", "ice", "mark", "cold" };
var grouped = Enumerable.Range(0, animals.Length)
                        .Where(i => i%3 == 0)
                        .Select(i => animals.Skip(i).Take(3).ToList())
                        .ToList();

【讨论】:

    【解决方案2】:

    您可以将整数除法技巧与GroupBy 一起使用:

    List<List<string>> lists = originalList
        .Select((s, index) => new { String = s, Index = index})
        .GroupBy(x => x.Index / 3)
        .Select(g => g.Select(x => x.String).ToList())
        .ToList();
    

    C# 中的整数除法会截断余数,因此0,1,2 / 3 都属于零组,3,4,5 / 3 属于一组,依此类推。

    【讨论】:

      猜你喜欢
      • 2018-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-06
      • 2011-03-28
      • 1970-01-01
      • 2012-03-29
      • 1970-01-01
      相关资源
      最近更新 更多