根据对象属性和阈值拆分对象集合
本文关键字:对象 拆分 集合 阈值 属性 | 更新日期: 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