2

假设我有这份珍贵岩石的清单:Adamantite, Diamonds, Crystal, Gold, Silver, Bronze

每块石头都是一个对象,它有一个名为的属性Rarity,它是一个基于以下值的字符串:Common, Precious, Rare, Mythic, Infinite.

我想根据这些Common最不珍贵和Infinite最珍贵的值对我的列表进行排序。有什么方法可以使用 linq 轻松实现这一点,还是我需要为这种情况弹出一个新方法?我也希望能够从最珍贵的到更少的排序。

谢谢!

4

2 回答 2

7

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

或者,考虑实施一个IComparer<string>将根据您的要求对字符串进行排序的方法。然后,您可以使用Enumerable.OrderBy()采用IComparer<TKey>.

于 2013-04-30T17:17:19.110 回答
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) 
    } 
}
于 2013-04-30T17:29:59.027 回答