加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

将排序的Ruby数组转换为具有可能重复的排名

发布时间:2020-12-17 01:19:37 所属栏目:百科 来源:网络整理
导读:我在 Ruby中有以下数字数组(越高越好),我想对它们进行排名.换句话说,我想转换以下排序列表: [89 52 52 36 18 18 5] 到以下等级: [1 2 2 4 5 5 7] 例如,获胜者获得第一名,第二名获得并列,依此类推.显然,重要的一点是,关系是可能的,那些关系必须跳过相应的级
我在 Ruby中有以下数字数组(越高越好),我想对它们进行排名.换句话说,我想转换以下排序列表:
[89 52 52 36 18 18 5]

到以下等级:

[1 2 2 4 5 5 7]

例如,获胜者获得第一名,第二名获得并列,依此类推.显然,重要的一点是,关系是可能的,那些关系必须跳过相应的级别.任何数量的关系都是可能的(3人分享第二名).

有没有一种优雅的方式来执行这种操作?

解决方法

使用 Enumerable#group_by
a = [89,52,36,18,5]

rank = 1
a.group_by {|x| x}.map { |k,v|
  ret = [rank] * v.size
  rank += v.size
  ret
}.flatten
# => [1,2,4,5,7]

UPDATE

rank,i = 1,0
a.map { |x|
  i += 1
  x != a[i-2] ? rank = i : rank
}
# => [1,7]

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读