我有一个散列,其值是所有数组.我想在这个哈希中查找一个键.如果它存在,我想为数组添加一个值.如果它不存在(hash [key]返回nil),那么我需要创建数组并添加一个值.目前我有这个:
hash[key].push elem unless hash[key].nul?
hash[key] ||= [elem]
Run Code Online (Sandbox Code Playgroud)
这涉及3次查找.我是ruby的新手,所以我相信有更好的方法可以做到这一点.它是什么?
我最初的计划是为hash []设置默认值.然后我可以使用:
hash[key].push elem
Run Code Online (Sandbox Code Playgroud)
不幸的是,如果密钥不存在,那只会更改默认值而不会添加新密钥.
在这种情况下,您需要创建一个哈希,如下所示:
hash = Hash.new { |h,k| h[k] = [] }
Run Code Online (Sandbox Code Playgroud)
上面是为处理像你这样的情况而创建的.看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]}
Run Code Online (Sandbox Code Playgroud)