我需要根据其中一个objects属性将对象列表拆分为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,并且可以根据输入集合拥有最大数量的链接
非常感谢任何完成此任务的示例 无论是在vb还是C#中使用linq或其他
答案 0 :(得分:0)
这应该适用于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