考虑哈希
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"]}
答案 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!
用于修改值,即数组。