hash = {}
str.split(',').each{|e| k,v = e.split('=')hash[k] = v }
def get_value(key)
hash[key]
end
def max3
hash.sort_by{|e| e[1]}.reverse.first(3).map{|e| e[0]}
end
终于明白你的意思了。这不是 hash 的问题,是 Array.new 的用法不对,你这样做是指用{}这个对象填充3遍,就是说是同一个对象填充了3次,所以无论你修改哪一个对象,其它的都会跟着变,因为是同一对象。
http://www.ruby-doc.org/core-2.2.0/Array.html#method-c-new-label-Common+gotchas
以上是 ruby 文档,他给出了正确的用法:
a = Array.new(2) { Hash.new }