说我有这个宝石列表:Adamantite, Diamonds, Crystal, Gold, Silver, Bronze
。
每个摇滚都是一个具有名为Rarity
的属性的对象,该属性是基于以下任一或这些值的字符串:Common, Precious, Rare, Mythic, Infinite
。
我想根据这些值对我的列表进行排序,其中Common
是最不珍贵的,而Infinite
是最珍贵的。{{1}}。有没有办法使用linq,我可以很容易地实现这一点,或者我是否需要为这种情况弹出一个新的方法?我也希望能够从最珍贵到最少的分类。
谢谢!
答案 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)
}
}