如何使用键和值对哈希进行排序

时间:2014-10-07 07:11:34

标签: ruby sorting hash ruby-2.0

考虑哈希

my_hash = {"drsn"=>["on", "tw", "th"], "mhsh"=>["tw", "th", "fo"], "achu"=>["th", "fo", "fi"]}

我可以通过

对哈希进行排序
Hash[my_hash.sort]

导致类似

的排序哈希
{"achu"=>["th", "fo", "fi"], "drsn"=>["on", "tw", "th"], "mhsh"=>["tw", "th", "fo"]}

但任何人都可以告诉我如何将与键一起排序?

喜欢

{"achu"=>["fi", "fo", "th"], "drsn"=>["on", "th", "tw"], "mhsh"=>["fo", "th", "tw"]}

我正在使用ruby 2.0.0

我也试过了sort_by

Hash[my_hash.sort_by {|k,v| v.sort}]

但得到了

{"achu"=>["th", "fo", "fi"], "mhsh"=>["tw", "th", "fo"], "drsn"=>["on", "tw", "th"]}

2 个答案:

答案 0 :(得分:1)

您无法通过针对哈希的一次顶级调用来执行此操作。您需要在按键排序哈希之前或之后对每个子数组进行一次排序。

这会对散列进行排序,然后对每个键的值进行排序:

Hash[my_hash.sort.map { |a,b| [a, b.sort] }]

答案 1 :(得分:1)

你的措辞有误导性。你正在尝试做两件事。按密钥对哈希进行排序(以及密钥为平局时的值)由以下内容完成:

Hash[my_hash.sort]

通过以下方式对每个值进行排序:

my_hash.each{|_, v| v.sort!}

此处,sort!用于修改值,即数组。