首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用ruby中的多个值对嵌套散列进行排序

用ruby中的多个值对嵌套散列进行排序
EN

Stack Overflow用户
提问于 2018-06-26 11:33:30
回答 2查看 124关注 0票数 0

我有以下嵌套的散列结构:

代码语言:javascript
复制
{12 => {:points=>0, :diff=>0},
 1=> {:points=>18, :diff=>57},
 4=>{:points=>12, :diff=>67},
 5=>{:points=>9, :diff=>62}}

我想先按点(降)和差(升)排序。

我只能使用以下方法对其进行排序:

代码语言:javascript
复制
my_hash.sort_by {|participant_id, values| values[:points] }.reverse.to_h

但是,我一直无法找到一种方法来按这两种价值观来分类。

我试过用:

代码语言:javascript
复制
my_hash.sort_by {|participant_id, values| values[:diff] or values[:points] }.reverse.to_h

关于散列排序的大多数答案都考虑一个值,比如this,而其他情况似乎不符合我的目的。你能帮我找到解决办法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-26 11:41:09

我会这么做:

代码语言:javascript
复制
hash = {12=>{:points=>0, :diff=>0}, 1=>{:points=>18, :diff=>57}, 4=>{:points=>12, :diff=>67}, 5=>{:points=>9, :diff=>62}}

hash.sort_by { |_, v| [-v[:points], v[:diff]] }.to_h
#=> {1=>{:points=>18, :diff=>57}, 4=>{:points=>12, :diff=>67}, 5=>{:points=>9, :diff=>62}, 12=>{:points=>0, :diff=>0}}

基本上,它将要排序的值提取为如下结构:[[0,0], [-18,57], [-12,67], [-9,62]]。注意- at -v[:points],这将导致降序。只有在第一次比赛时才考虑第二个号码。

票数 1
EN

Stack Overflow用户

发布于 2018-06-26 11:38:56

你试过这个吗。

代码语言:javascript
复制
my_hash.sort_by {|participant_id, values| [values[:diff], values[:points]] }.reverse.to_h
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51041912

复制
相关文章

相似问题

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