2014-07-03 60 views
0

我需要根據其中一個對象屬性 將我的對象列表拆分爲n列表。屬性可以是這種情況下的鏈接列表。它應該被拆分爲方式的每個輸出列表中的元素的鏈接總數不應該大於某一閾值,例如10個
我的對象類是作爲遵循根據對象屬性和閾值拆分對象集合

Class MenuSectionData 
{ 
    string description 
    List<string> links 
} 

以下列表具有的對象數從MenuSectionData類,每一個更其具有特定數量的鏈接,例如2,3,4,1,2。此外,如果鏈接一個對象的數目大於閾值,基本上我有根據在每個列表

私人menuSectionsDataList方式列表(OF MenuSectionDate)= quickMenuDataHandler.GetData可用時隙截斷額外的鏈接()

基本輸出應該像

List(Of List(Of MenuSectionData)) 

在某種程度上,對於上面所列的每個子列表鏈接的總數不應該大於10和共ULD有它可以持有根據輸入集合連接的最大數目

任何樣品來實現這一任務是使用LINQ或他人

回答

0

這應該Linqpad工作高度讚賞 無論是在VB或C#。

在下面的代碼中,我們指定我們希望每個部分最多包含10個鏈接,並且在部分列表中最多包含12個鏈接。

void Main() 
{ 
    var firstMenuSection = new MenuSectionData{ 
     Description = "First", 
     Links = new List<string> {"link 1", "link 2", "link 3", "link 4","link 5", "link 6","link 7", "link 8","link 9", "link 10","link 11", "link 12"}}; 

    var secondMenuSection = new MenuSectionData{ 
     Description = "Second", 
     Links = new List<string> {"link 1", "link 2", "link 3", "link 4","link 5"}}; 

    var initialMenu = new List<MenuSectionData>{ 
     firstMenuSection, secondMenuSection 
    }; 

    var menu = CreateConstrainedMenu(initialMenu, 12, 10); 

    menu.Dump(); 
} 

public List<MenuSectionData> CreateConstrainedMenu(List<MenuSectionData> initialMenu, int maxNumberOfLinks, int maxNumberOfLinksPerSection){ 

    int remainingLinks = maxNumberOfLinks; 
    foreach(var section in initialMenu){ 
     var availableLinks = section.Links.Take(Math.Min(remainingLinks,maxNumberOfLinksPerSection)).ToList(); 
     section.Links = availableLinks; 
     remainingLinks -= availableLinks.Count(); 
    } 

    return initialMenu; 
} 

public class MenuSectionData 
{ 
    public string Description {get;set;} 
    public List<string> Links {get;set;} 
} 

// Define other methods and classes here 
+1

感謝您的回答 我沒有足夠的聲望投票它 – Tohid