将排序的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] (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |