Hash可以按键或值排序吗?

rns*_*nso 3 dictionary hashtable crystal-lang

是否可以在以下代码中按键或按值对哈希进行排序:

myhash.each_key do |key| 
   print myhash[key], "\t:\t", key, "\n" 
end
Run Code Online (Sandbox Code Playgroud)

pjs*_*pjs 5

按键排序:

myhash = {5 => "five", 3 => "three", 2 => "two", 4 => "four", 1 => "one"}

myhash.keys.sort.each do |key| 
  print myhash[key], "\t:\t", key, "\n" 
end
Run Code Online (Sandbox Code Playgroud)

产生

one     :   1
two     :   2
three   :   3
four    :   4
five    :   5
Run Code Online (Sandbox Code Playgroud)

按值排序需要花费更多精力:

myhash.to_a.sort { |item1, item2| item1[1] <=> item2[1] }.each do |item|
  puts item.join("\t:\t")
end
Run Code Online (Sandbox Code Playgroud)

产生

5   :   five
4   :   four
1   :   one
3   :   three
2   :   two
Run Code Online (Sandbox Code Playgroud)

如果您希望结果为 value:key order,请更改

puts item.join("\t:\t")
Run Code Online (Sandbox Code Playgroud)

puts item.reverse.join("\t:\t")
Run Code Online (Sandbox Code Playgroud)