我正在构建一个小工具来显示奥运奖牌数。我有一个“国家”对象的集合,每个对象都有一个“名称”属性,以及“金牌”,“银牌”,“铜牌”的奖牌数量。按数字排序(最高优先),然后按字母排序(按字母顺序排列)
列表应该被排序: 1.总徽章计数首先 2.如果相同奖牌,子排序类型 3(金>银>青铜,即两个金> 1个金+ 1银)。如果相同的奖牌和类型,按字母顺序排序
我在做这个红宝石,但我认为语言无所谓。我确实找出了一个解决方案,但是如果觉得必须有更加优雅的方式来做到这一点。
这里就是我所做的:
创建加权奖牌总数虚拟属性。所以如果他们有2金1银,加权总数将是“3.020100”。 1金和1银和1铜将会是“3.010101”
既然我们想按照最高的奖牌数排序,那么排序是DESC。但是之后我们想按字母顺序进行分类(即ASC)。所以我创建了一个函数,可以将一个单词反转(即“加拿大”=>“xzmzwz”)
将加权合计转换为字符串,concat反相名称(即“3010101xzmzwz”),然后降序排序。瞧。
到目前为止,有人已经想出了如何在大约2行代码中做同样的事情。照顾开导我?
这是特定于某个Ruby版本吗?它似乎不适合我。 – Beanish 2010-02-09 21:33:45
它不应该。它适用于1.8.7和1.9,我没有看到为什么它不适用于1.8.6。 'sort_by'绝对存在于1.8.6中,'Array#<=>'也是如此。 – sepp2k 2010-02-09 21:36:57
请注意,'sort_by'不就地排序。 – sepp2k 2010-02-09 21:37:46