根据对象属性和阈值拆分对象集合

本文关键字:对象 拆分 集合 阈值 属性 | 更新日期: 2023-09-27 18:11:28

我需要根据其中一个objects属性将对象列表拆分为n个列表在本例中,属性可以是一个链接列表。它应该以这样的方式分割,即每个输出列表中元素的链接总数不应该超过某个阈值,例如10
我的对象类如下

Class MenuSectionData
{
  string description
  List<string> links
 }  

下面的列表有一些来自MenuSectionData类的对象,每个对象都有特定数量的链接,例如2,3,4,1,2。此外,如果一个对象的链接数量超过阈值,基本上我必须根据每个列表中的可用槽位截断额外的链接

Private menuSectionsDataList As ListMenuSectionDate) = quickMenuDataHandler.GetData ()

基本上输出应该像

List(Of List(Of MenuSectionData))

在某种程度上,上面列表的每个子列表的链接总数不应超过10个,并且可以根据输入集合设置最大链接数

完成此任务的任何样本都是高度赞赏的

根据对象属性和阈值拆分对象集合

这应该可以在Linqpad上工作。

在下面的代码中,我们指定我们希望每个节最多有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