Ruby 按值排序,如果相等,则键入

Ruby 按值排序,如果相等,则键入,ruby,Ruby,我想在Ruby中按值对哈希进行排序,如果相等,则按键进行排序。 我尝试了此操作,但它返回相同的数组: hash.sort { |x, y| if x[1] == y[1] comp = x[0] <=> y[0] else comp = x[1] <=> y[1] end comp } hash.sort{x,y| 如果x[1]==y[1] comp=x[0]y[0] 其他的 comp=x[1]y[1] 结束 公司 } 如果要将哈

我想在Ruby中按值对哈希进行排序,如果相等,则按键进行排序。 我尝试了此操作,但它返回相同的数组:

 hash.sort { |x, y|
  if x[1] == y[1]
    comp = x[0] <=> y[0]
  else
    comp =  x[1] <=> y[1]
  end
  comp
 }
hash.sort{x,y|
如果x[1]==y[1]
comp=x[0]y[0]
其他的
comp=x[1]y[1]
结束
公司
}
如果要将哈希作为响应,请执行以下操作:

Hash[ hash.sort_by(&:reverse) ]
如果要将哈希作为响应,请执行以下操作:

Hash[ hash.sort_by(&:reverse) ]

使用
sort\u by
,而不是
sort
。它会更快。请注意,这将返回一个由两个值数组组成的数组。如果你真的想要一个新的散列,你需要将它包装在
散列中。[]
,例如
排序的\u散列=散列[hash.sort\u by(&:reverse)]
@Phrogz我编辑了响应以添加你的建议使用
排序依据
,而不是
排序
。它会更快。请注意,这将返回一个由两个值数组组成的数组。如果您确实想要一个新的散列,您需要将其包装在
散列中。[]
,例如
排序的\u散列=散列[hash.sort\u by(&:reverse)]
@Phrogz我编辑了响应以添加您的建议为什么要对散列进行排序?它没有什么价值。取而代之的是,抓取密钥,按您想要的方式排序,并使用
values\u at
以相同的顺序提取值。实际上没有实际原因,这纯粹是一个学术问题。@铁皮人说,这可以用来实现一个简单的优先级队列。为什么要对哈希排序?它没有什么价值。取而代之的是,抓取钥匙,按您想要的顺序排列,然后使用
values\u at
以相同的顺序提取值。实际上没有实际原因,这纯粹是一个学术问题。@铁皮人说,这可以用来实现一个简单的优先级队列。
Hash[ hash.sort_by(&:reverse) ]