根据主观值对列表进行排序

时间:2013-04-30 17:15:16

标签: c# list sorting

说我有这个宝石列表:Adamantite, Diamonds, Crystal, Gold, Silver, Bronze

每个摇滚都是一个具有名为Rarity的属性的对象,该属性是基于以下任一或这些值的字符串:Common, Precious, Rare, Mythic, Infinite

我想根据这些值对我的列表进行排序,其中Common是最不珍贵的,而Infinite是最珍贵的。{{1}}。有没有办法使用linq,我可以很容易地实现这一点,或者我是否需要为这种情况弹出一个新的方法?我也希望能够从最珍贵到最少的分类。

谢谢!

2 个答案:

答案 0 :(得分:7)

我建议使用枚举而不是字符串。然后你可以根据它们的稀有性简单地在枚举中对这些值进行排序,然后命令应该“正常工作”。

或者,考虑实施IComparer<string>,根据您的要求订购字符串。然后,您可以使用Enumerable.OrderBy() overload that takes an IComparer<TKey>

答案 1 :(得分:2)

如果您不想使用枚举,只需创建一个自定义比较方法,如下所示:

{
...
List rocks = GetRocks();

List sortedRocks = rocks.OrderBy(a => a, new RockComparer()).ToList();
...
}

public class RockComparer : IComparer<string> 
{ 
    public int Compare(Rock x, Rock y) 
    { 
        ... (implement your comparing functionality here) 
    } 
}