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