【发布时间】:2011-01-15 00:06:45
【问题描述】:
我正在构建一个小部件来显示奥运会的奖牌数。我有一个“国家”对象的集合,其中每个对象都有一个“名称”属性,以及用于奖牌数量的“金”、“银”、“铜”。
列表应该排序: 1.首先按奖牌总数 2.如果奖牌相同,按类型进行分类(金>银>铜,即两金>一金+一银) 3.如果奖牌和类型相同,按字母顺序排序
我正在用 ruby 做这个,但我想语言并不重要。我确实想出了一个解决方案,但如果觉得必须有一个更优雅的方法来做到这一点。
这就是我所做的:
使用加权奖牌总数创建一个虚拟属性。因此,如果他们有 2 枚金币和 1 枚银币,加权总数将为“3.020100”。 1金1银1铜就是“3.010101”
由于我们要将奖牌数排序为最高,因此列表按 DESC 排序。但是之后我们想要按字母顺序(即 ASC)进行子排序。所以我创建了一个函数,可以对一个单词进行 alpha 反转(即“canada”=>“xzmzwz”)
将加权总数转换为字符串,连接反向名称(即“3010101xzmzwz”),然后降序排序。瞧。
到目前为止,有人已经弄清楚了如何用大约 2 行代码来做同样的事情。愿意开导我吗?
【问题讨论】:
标签: ruby arrays sorting enumerable