C# 列出<Item>父子关系,按字母顺序对项进行排序



我有一个类:

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; }
}

现在我可以创建一个列表:

List<Item> list = new List<Item>();

如何按字母顺序递归地排序列表及其子列表?

这是我的尝试:

  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();            
    }

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

void SortRecursively(List<Item> items) {
  foreach (var item in items) {
    item.Items = item.Items.OrderBy(i => i.Title).ToList();
    SortRecursively(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()
}

就地排序:

static void OrderList(List<Item> l)
{
    l.Sort((i1,i2) => i1.Title.CompareTo(i2.Title));
    foreach (var item in l)
        OrderList (item.Items);
}

这对我有用:

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

最新更新