2014-07-03 61 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