2015-10-09 30 views
-6

我喜歡將列表拆分爲多個列表,列表包含GUID。例如,如果主列表包含130個GUID,我將閾值保持爲50,所以它應該返回,3個列表,第一個和第二個列表應包含50個列表,第三個列表將包含30個GUID。將列表分割到C#中的子列表中

我們該怎麼做?請幫助我!

+1

我強烈建議您在發佈問題之前先搜索網站。這個問題的相關問題列表顯示了很多重複。 –

回答

0

您可以使用下面的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

+0

感謝蒂姆,它的工作,讚賞,但另一種方法是,它可能會有所幫助,使用MoreLinq ... IEnumerable > result = enumerableGuids.Batch(50); – mariapradeep

0

您可以在組小數部分使用MoreLinq寫喬恩斯基特: google code(可上的NuGet)

你正在尋找的方法是Batch

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

嗨,這是一個完美的使用方式,我已經通過Nuget下載了MoreLinq,它的功能就像一個魅力!謝謝,謝謝.. – mariapradeep

0

您可以使用此代碼。在這裏我使用字符串進行演示,你可以使用你的​​。

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); 
} 
+0

謝謝Arghya,另一種方法是使用MoreLinq ... IEnumerable > result = enumerableGuids.Batch(50); – mariapradeep