这是对哈希进行排序并返回hash对象(而不是Array)的最佳方法吗?
h = {"a"=>1, "c"=>3, "b"=>2, "d"=>4}
# => {"a"=>1, "c"=>3, "b"=>2, "d"=>4}
Hash[h.sort]
# => {"a"=>1, "b"=>2, "c"=>3, "d"=>4}
这是对哈希进行排序并返回hash对象(而不是Array)的最佳方法吗?
h = {"a"=>1, "c"=>3, "b"=>2, "d"=>4}
# => {"a"=>1, "c"=>3, "b"=>2, "d"=>4}
Hash[h.sort]
# => {"a"=>1, "b"=>2, "c"=>3, "d"=>4}
当前回答
如果你不想使用ruby 1.9.2或使用你自己的变通方法,ActiveSupport::OrderedHash是另一个选择。
其他回答
如果你不想使用ruby 1.9.2或使用你自己的变通方法,ActiveSupport::OrderedHash是另一个选择。
在Ruby 2.1中,它很简单:
h.sort.to_h
你在OP中给了自己最好的答案:Hash[h]。如果你渴望更多的可能性,这里是原始哈希的就地修改,使其排序:
h.keys.sort.each { |k| h[k] = h.delete k }
按键排序哈希,在Ruby中返回哈希
与解构和哈希#排序
hash.sort { |(ak, _), (bk, _)| ak <=> bk }.to_h
可列举的# sort_by
hash.sort_by { |k, v| k }.to_h
使用默认行为进行哈希排序
h = { "b" => 2, "c" => 1, "a" => 3 }
h.sort # e.g. ["a", 20] <=> ["b", 30]
hash.sort.to_h #=> { "a" => 3, "b" => 2, "c" => 1 }
注意:< Ruby 2.1
array = [["key", "value"]]
hash = Hash[array]
hash #=> {"key"=>"value"}
注:> Ruby 2.1
[["key", "value"]].to_h #=> {"key"=>"value"}
@ordered = {}
@unordered.keys.sort.each do |key|
@ordered[key] = @unordered[key]
end