我是c#的新手,我正在寻找一些问题的帮助,我按列表中元素的长度对列表进行排序,我将尝试使用简化版本进行解释.
我有一个具有以下格式列表的类别的对象列表:
category.Name; category.Path;
当我从外部数据库中提取类别列表并将它们导入List时,它们没有特定的顺序,例如:
Luxury Seats /Base/Seats Small Seats /Base/Seats/Luxury Seats Seats /Base Small Gloves /Base/Gloves Large Seats /Base/Seats/Luxury Seats Small Red Gloves /Base/Gloves/Small Gloves Gloves /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 Gloves /Base Small Gloves /Base/Gloves Small Red Gloves /Base/Gloves/Small Gloves
因此,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 => ...);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。