我有一个散列,其值是所有数组。我想在这个哈希中查找一个键。如果它存在,我想为数组添加一个值。如果它不存在(hash [key]返回nil),那么我需要创建数组并添加一个值。目前我有这个:
hash[key].push elem unless hash[key].nul?
hash[key] ||= [elem]
这涉及3次查找。我是红宝石的新手,所以我确信有更好的方法可以做到这一点。它是什么?
我原来的计划是为hash []设置默认值。然后我可以使用:
hash[key].push elem
不幸的是,如果密钥不存在,那只会更改默认值而不会添加新密钥。
答案 0 :(得分:5)
在这种情况下,您需要创建一个哈希,如下所示:
hash = Hash.new { |h,k| h[k] = [] }
创建以上内容是为了处理像你这样的情况。看new {|hash, key| block } → new_hash
hash = Hash.new { |h,k| h[k] = [] }
hash[:key1] << 1
hash[:key2] << 2
hash[:key1] << 3
hash # => {:key1=>[1, 3], :key2=>[2]}
答案 1 :(得分:2)
您可以尝试:
(hash[key] ||= []) << elem
然而,奥雅纳的答案要好得多。
答案 2 :(得分:0)
您应该使用默认值创建哈希。
hash = Hash.new { |h,k| h[k] = [] }
hash[key].push elem