Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#列表<;项目>;父子关系,按字母顺序排列项目_C# - Fatal编程技术网

C#列表<;项目>;父子关系,按字母顺序排列项目

C#列表<;项目>;父子关系,按字母顺序排列项目,c#,C#,我有一门课: public class Item { public Item() { Items = new List<Item>(); } public string ItemId { get; set; } public string ParentId { get; set; } public string Title { get; set; } public List<Item> Items { get; se

我有一门课:

public class Item
{
   public Item()
   {
      Items = new List<Item>();
   }

   public string ItemId { get; set; }
   public string ParentId { get; set; }
   public string Title { get; set; }
   public List<Item> Items { get; set; }

}
公共类项目
{
公共项目()
{
项目=新列表();
}
公共字符串ItemId{get;set;}
公共字符串ParentId{get;set;}
公共字符串标题{get;set;}
公共列表项{get;set;}
}
现在我可以创建一个列表:

List<Item> list = new List<Item>();
List List=新列表();
如何按字母顺序对列表及其子项进行递归排序

这是我的尝试:

  list.OrderList();


  private static void OrderList(this List<Item> list)
    {
        foreach (Item item in list)
        {
            if (item != null && item.Items != null && item.Items.Count > 0)
            {
                item.Items.OrderChildList();
            }
        }
    }

    private static void OrderChildList(this List<Item> list)
    {
        list = list.OrderBy(t => t.Title).ToList();            
    }
list.OrderList();
私有静态无效订单列表(此列表)
{
foreach(列表中的项目)
{
if(item!=null&&item.Items!=null&&item.Items.Count>0)
{
item.Items.OrderChildList();
}
}
}
私有静态void OrderChildList(此列表)
{
list=list.OrderBy(t=>t.Title.ToList();
}

如问题中所述,每个列表都是独立排序的。因此,一个简单的递归可以:

void SortRecursively(List<Item> items) {
  foreach (var item in items) {
    item.Items = item.Items.OrderBy(i => i.Title).ToList();
    SortRecursively(item.Items);
  }
}
void sortrecurously(列表项){
foreach(项目中的var项目){
item.Items=item.Items.OrderBy(i=>i.Title.ToList();
粗略排序(item.Items);
}
}
(这假设这是一个非循环图,处理周期需要跟踪哪些项目已排序并跳过它们。)

这应该可以做到吗

private static void OrderList(Item item)
{
    foreach (Item item in item.Items)
    {
        if (item != null && item.Items != null && item.Items.Count > 0)
        {
            OrderList(item);
        }
    }
    Items = Items.OrderBy(i => i.Title).ToList()
}
这对我很有用:

public void OrderList()
{
    if (Items.Count == 0)
        return;
    Items = Items.OrderBy(e => e.Title).ToList();
    Items.ForEach(e => e.OrderList());
}
就地分拣:

static void OrderList(List<Item> l)
{
    l.Sort((i1,i2) => i1.Title.CompareTo(i2.Title));
    foreach (var item in l)
        OrderList (item.Items);
}
静态无效订单列表(列表l)
{
l、 排序((i1,i2)=>i1.Title.CompareTo(i2.Title));
foreach(l中的var项目)
订单列表(item.Items);
}

子项的相对顺序是否影响父项的顺序(即,这只是对每个列表进行独立排序)?父项已排序。在
list.orderList()之前
I调用
list.OrderBy(t=>t.Title)将为父级排序。现在我必须遍历每个家长,检查是否有孩子对他们进行排序,然后对每个孩子检查是否有孩子并对他们进行排序。。。诸如此类。所有子项是否也会在主列表中?