我有一个班级:
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();
}
答案 0 :(得分:1)
如问题中所述,每个列表都是独立排序的。因此,一个简单的递归将会:
void SortRecursively(List<Item> items) {
foreach (var item in items) {
item.Items = item.Items.OrderBy(i => i.Title).ToList();
SortRecursively(item.Items);
}
}
(这假设这是一个非循环图,处理周期需要跟踪哪些项目已经排序并跳过它们。)
答案 1 :(得分:1)
应该这样做..?
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()
}
答案 2 :(得分:1)
到位排序:
static void OrderList(List<Item> l)
{
l.Sort((i1,i2) => i1.Title.CompareTo(i2.Title));
foreach (var item in l)
OrderList (item.Items);
}
答案 3 :(得分:0)
这对我有用:
public void OrderList()
{
if (Items.Count == 0)
return;
Items = Items.OrderBy(e => e.Title).ToList();
Items.ForEach(e => e.OrderList());
}