我试图创建一个有序哈希键的数组。我希望它们在数组和散列中以相同的顺序列出。我有这个哈希。
h = { "a" => 3, "b" => 1, "c" = 4, "d" = 2 }
我想要的是这个数组。
arr = ["b", "d", "a", "c"]
我有
h.sort_by { |k, v| v}
h.keys
但是按字母顺序返回键。我可以做些什么来保持它们按排序哈希的顺序?
答案 0 :(得分:4)
h.sort_by{|k,v| v}
将为您提供[["b", 1], ["d", 2], ["a", 3], ["c", 4]]
,然后使用.map
获取密钥。
h.sort_by{|k,v| v}.map &:first
答案 1 :(得分:3)
h = { "a" => 3, "b" => 1, "c" => 4, "d" => 2 }
p h.sort_by(&:last).map(&:first) #=> ["b", "d", "a", "c"]
答案 2 :(得分:1)
你也可以试试这个,
h = { "a" => 3, "b" => 1, "c" => 4, "d" => 2 }
Hash[h.sort_by{|k,v| v}].keys
#=> ["b", "d", "a", "c"]
答案 3 :(得分:0)