首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按数字对对象集合进行排序(首先是最高的),然后按字母排序(字母)

按数字对对象集合进行排序(首先是最高的),然后按字母排序(字母)
EN

Stack Overflow用户
提问于 2010-02-09 20:59:05
回答 3查看 1.9K关注 0票数 5

我正在制作一个小部件来显示奥运会奖牌的数量。我收藏了一批“乡村”物品,每件都有一个“名字”属性,还有“金”、“银”、“铜牌”作为奖牌数。

第一,按奖牌总数2.如果奖牌相同,按类型分类(金>银>铜牌,即.2金>1金+1银) 3。如果奖牌和类型相同,按字母顺序排列。

我是用红宝石做的,但我想语言并不重要。我确实想出了一个解决方案,但如果我觉得一定有一个更优雅的方法去做。

我所做的是:

  1. 创建一个具有加权奖牌总数的虚拟属性。因此,如果他们有2黄金和1白银,加权总数将是"3.020100“。1枚金牌、1枚银牌和1枚铜牌将是"3.010101"
  2. Since --我们想把奖牌数排在第一位,名单排在第一位。但我们想按字母顺序(即.在那之后。因此,我创建了一个函数,它可以将一个单词反演(例如。"canada“"xzmzwz")
  3. Convert加权总和为一个字符串,连接反向名称(即。( "3010101xzmzwz"),然后排序降序。瞧,

到目前为止,已经有人在大约2行代码中找到了如何做同样的事情。想启发我一下吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-02-09 21:06:32

代码语言:javascript
复制
countries.sort_by do |country|
  medals = country.gold + country.silver + country.bronze
  [-medals, -country.gold, -country.silver, country.name]
end
票数 10
EN

Stack Overflow用户

发布于 2010-02-09 22:44:10

一个简单的方法是将sort_by与一些任意格式的字符串一起使用,例如:

代码语言:javascript
复制
countries.sort_by do |c|
  "%010d-%010d-%010d-%s" % [ c.gold, c.silver, c.bronze, c.name ]
end

这就把所有国家都变成了ASCII可排序的名单,将获得的奖牌数量填入了大概惊人的10个名次。如果任何人赢得超过100亿枚奖牌,你的计划可能会失灵,但这似乎是一个合理的限制。

票数 1
EN

Stack Overflow用户

发布于 2010-02-10 04:10:14

在Java中,您可以在对象上实现类似的实现,然后可以轻松地在ArrayList或数组中对其进行排序。Ruby中是否有一种机制可以告诉您如何比较两个"Country“对象?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2232470

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档