我正在制作一个小部件来显示奥运会奖牌的数量。我收藏了一批“乡村”物品,每件都有一个“名字”属性,还有“金”、“银”、“铜牌”作为奖牌数。
第一,按奖牌总数2.如果奖牌相同,按类型分类(金>银>铜牌,即.2金>1金+1银) 3。如果奖牌和类型相同,按字母顺序排列。
我是用红宝石做的,但我想语言并不重要。我确实想出了一个解决方案,但如果我觉得一定有一个更优雅的方法去做。
我所做的是:
到目前为止,已经有人在大约2行代码中找到了如何做同样的事情。想启发我一下吗?
发布于 2010-02-09 21:06:32
countries.sort_by do |country|
medals = country.gold + country.silver + country.bronze
[-medals, -country.gold, -country.silver, country.name]
end发布于 2010-02-09 22:44:10
一个简单的方法是将sort_by与一些任意格式的字符串一起使用,例如:
countries.sort_by do |c|
"%010d-%010d-%010d-%s" % [ c.gold, c.silver, c.bronze, c.name ]
end这就把所有国家都变成了ASCII可排序的名单,将获得的奖牌数量填入了大概惊人的10个名次。如果任何人赢得超过100亿枚奖牌,你的计划可能会失灵,但这似乎是一个合理的限制。
发布于 2010-02-10 04:10:14
在Java中,您可以在对象上实现类似的实现,然后可以轻松地在ArrayList或数组中对其进行排序。Ruby中是否有一种机制可以告诉您如何比较两个"Country“对象?
https://stackoverflow.com/questions/2232470
复制相似问题