在我需要对哈希进行深度排序的用例中,哈希始终是一棵树,其中键是标签,值是(子)树(如果是哈希)或叶子(否则)。我只需要对树的标签(而不是值)进行深度排序。
我懂了
before: {"a":[2,10,{"5":null,"1":null,"3":null}],"x":{"5":null,"1":null,"3":null},"a2":{"5":[2,10,5],"1":null,"3":null}}
after: {"a":[2,10,{"5":null,"1":null,"3":null}],"a2":{"1":null,"3":null,"5":[2,10,5]},"x":{"1":null,"3":null,"5":null}}
有了这个
def deeply_sort_hash(object)
return object unless object.is_a?(Hash)
hash = Hash.new
object.each { |k, v| hash[k] = deeply_sort_hash(v) }
sorted = hash.sort { |a, b| a[0].to_s <=> b[0].to_s }
hash.class[sorted]
end