微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – 按内容和元素长度对列表进行排序

我是c#的新手,我正在寻找一些问题的帮助,我按列表中元素的长度对列表进行排序,我将尝试使用简化版本进行解释.

我有一个具有以下格式列表的类别的对象列表:

category.Name;
category.Path;

当我从外部数据库提取类别列表并将它们导入List时,它们没有特定的顺序,例如:

Luxury Seats      /Base/Seats
Small Seats       /Base/Seats/Luxury Seats
Seats             /Base
Small @R_404_5227@s      /Base/@R_404_5227@s
Large Seats       /Base/Seats/Luxury Seats
Small Red @R_404_5227@s  /Base/@R_404_5227@s/Small @R_404_5227@s
@R_404_5227@s            /Base
Budget Seats      /Base/Seats/Luxury Seats/Small Seats

从上面你可以看到它们没有特定的顺序,只需按照它们在数据库中的顺序.
我想要做的是使用Path元素的名称和path元素的组成部分的长度来组织它们.我需要通过重新组织列表来实现以下格式:

Seats             /Base
Luxury Seats      /Base/Seats
Small Seats       /Base/Seats/Luxury Seats
Budget Seats      /Base/Seats/Luxury Seats/Small Seats
Large Seats       /Base/Seats/Luxury Seats
@R_404_5227@s            /Base
Small @R_404_5227@s      /Base/@R_404_5227@s
Small Red @R_404_5227@s  /Base/@R_404_5227@s/Small @R_404_5227@s

因此,List基于Path组件元素的深度和类别名称构建为层次结构.

如果有人能帮助我,那将是非常好的.

解决方法

假设:

var list = new List<Category>();

您只有两个选择:

var result = list.OrderBy(c => c.Name) // Luxury Seats; Seates (L -> S)
                 .ThenBy(c => c.Path); // /Base; /Base/Seats (shorter -> longer)

或相反亦然:

var result = list.OrderBy(c => c.Path) // /Base; /Base/Seats
                 .ThenBy(c => c.Name); // Luxury Seats; Seates

您也可以按路径深度排序:

var result = list.OrderBy(c => c.Path.Split(new[] { '\' }).Length) // less slashes -> more slashes
                 .ThenBy(c => ...);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐