我在工作中遇到了这个问题,虽然我有解决方案,但我不禁感觉有一种更优雅的方式。 List.IndexOf()的使用对我来说有点难以理解。有没有更好的方式来订购IEnumerable以匹配任意排序?
我必须按信用评级排序BreakdownItems的集合。信用评级不遵循字母顺序,所以我将它们视为只是具有任意的非逻辑顺序。
IEnumerable<BreakdownItem> unsortedCreditRatings = new List<BreakdownItem>
{
new BreakdownItem{ Name = "CCC", Weight=20d},
new BreakdownItem{ Name = "AA", Weight=20d},
new BreakdownItem{ Name = "AAA", Weight=10d},
new BreakdownItem{ Name = "B", Weight=50d},
};
var sortOrder = new List<string>
{ "AAA", "AA", "A", "BBB", "BB", "B", "CCC", "below CCC" };
var sortedRatingBreakdown = unsortedCreditRatings
.OrderBy(item => sortOrder.IndexOf(item.Name));
重复字符串就像评分打开数据完整性问题的可能性。你有没有考虑过你的评价值的枚举? – 2012-02-16 21:56:13
已经有一个枚举了,我没有在这里使用它,因为“低于CCC”不适合Enum。但问题是关于任意排序的更一般的观点 – 2012-02-16 22:02:17
因此,您希望以相同的顺序将任何CCC以下的任何东西集中在一起? – 2012-02-16 22:06:55