检查nil和更新哈希值的最佳方法

Jac*_*STL 0 ruby arrays hash

我有一个散列,其值是所有数组.我想在这个哈希中查找一个键.如果它存在,我想为数组添加一个值.如果它不存在(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)

不幸的是,如果密钥不存在,那只会更改默认值而不会添加新密钥.

Aru*_*hit 5

在这种情况下,您需要创建一个哈希,如下所示:

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)