我正在构建一个小部件,用于显示奥运会的奖牌计数。我有一组“国家”对象,每个对象都有一个“名称”属性和“金牌”,“银牌”和“铜牌”的奖牌计数。
列表应按以下方式排序: 1.首先按总奖牌数排序 2.如果奖牌数量相同,则按类型排序(金牌>银牌>铜牌,即两枚金牌> 1枚金牌+ 1枚银牌) 3.如果奖牌数量和类型相同,则按字母顺序排序
我在ruby中执行此操作,但我想这种方法肯定还有更加优雅的解决方案。
这是我所做的:
1.创建具有加权奖牌总数的虚拟属性。因此,如果他们有2个金牌和1个银牌,则加权总数为“3.020100”。1个金牌,1个银牌和1个铜牌将是“3.010101” 2.由于我们希望按最高奖牌数首先排序,因此列表按降序排序。但是然后我们希望在此之后按字母顺序进行子排序(即ASC)。因此,我创建了一个函数,可以alpha-invert单词(即“canada”=>“xzmzwz”) 3.将加权总数转换为字符串,连接反转的名称(即“3010101xzmzwz”),然后按降序排序。大功告成。
到现在为止,有人已经想出了如何用约2行代码完成相同的操作。你能否给我指点一下呢?
列表应按以下方式排序: 1.首先按总奖牌数排序 2.如果奖牌数量相同,则按类型排序(金牌>银牌>铜牌,即两枚金牌> 1枚金牌+ 1枚银牌) 3.如果奖牌数量和类型相同,则按字母顺序排序
我在ruby中执行此操作,但我想这种方法肯定还有更加优雅的解决方案。
这是我所做的:
1.创建具有加权奖牌总数的虚拟属性。因此,如果他们有2个金牌和1个银牌,则加权总数为“3.020100”。1个金牌,1个银牌和1个铜牌将是“3.010101” 2.由于我们希望按最高奖牌数首先排序,因此列表按降序排序。但是然后我们希望在此之后按字母顺序进行子排序(即ASC)。因此,我创建了一个函数,可以alpha-invert单词(即“canada”=>“xzmzwz”) 3.将加权总数转换为字符串,连接反转的名称(即“3010101xzmzwz”),然后按降序排序。大功告成。
到现在为止,有人已经想出了如何用约2行代码完成相同的操作。你能否给我指点一下呢?
sort_by
在1.8.6中确实存在,Array#<=>
也是如此。 - sepp2ksort_by
不会就地排序。 - sepp2k