ruby hash 排序

ruby hash 排序

h = {"sa"=>1, "ab"=>2, "x3"=>3, "de"=>, :de=>5}
h.sort_by{|k,v|k.to_s}
#=> [["ab", 2], [:de, 5], ["de", 6], ["sa", 1], ["x3", 3]]

h.sort_by{|k,v|v.to_s}
#=>[["sa", 1], ["ab", 2], ["x3", 3], [:de, 5], ["de", 6]]

h.sort_by{|k|k[0].to_s}
#=>[["ab", 2], [:de, 5], ["de", 6], ["sa", 1], ["x3", 3]]

h.sort_by{|k|k[1].to_s}
#=>[["sa", 1], ["ab", 2], ["x3", 3], [:de, 5], ["de", 6]]

h = {"sa"=>1, "ab"=>2, "x3"=>3, "de"=>6, :de=>5}
h.sort
#=>argumentError: comparison of Array with Array failed,因为:de=>5与"de"=>6 Key类型不一样,键类型一样,才可以直接用sort,按键排序,否则要把键处理为一致的数据(可以比较的数据类型)