将列表拆分为子列表

时间:2015-09-17 08:48:54

标签: c# linq

我相信这对你来说是另一个简单的LINQ大师。有没有什么办法可以将List分成几个单独的Some对象列表,使用item index作为每个分割的分隔符?

让我举例说明:我有一个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]]

2 个答案:

答案 0 :(得分:0)

只是一个天真的幻想:

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();

答案 1 :(得分:0)

您可以将整数除法技巧与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属于一组,依此类推。

相关问题