2015-09-17 76 views
-2

我相信這是另一個簡單的LINQ掌握了那裏。有沒有什麼辦法可以將List分成幾個單獨的Some Object列表,使用item index作爲每個split的分隔符?拆分列表到子列表

讓我舉例說明:我有一個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]]

+0

請參閱[這裏](http://stackoverflow.com/questions/12389203/how-do-i-chunk-an-enumerable) – mshsayem

+0

JavaScript是如何相關的? –

+1

這個問題是抄襲從http://stackoverflow.com/questions/419019/split-list-into-sublists-with-linq –

回答

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屬於一組等。