<分区>
我想在 Ruby 中创建一个默认值为空数组的哈希
所以,我编码
x = Hash.new([])
但是,当我尝试将一个值压入其中时
x[0].push(99)
所有键都将 99
插入该数组。我该如何解决这个问题?
标签 ruby
<分区>
我想在 Ruby 中创建一个默认值为空数组的哈希
所以,我编码
x = Hash.new([])
但是,当我尝试将一个值压入其中时
x[0].push(99)
所有键都将 99
插入该数组。我该如何解决这个问题?
最佳答案
Lakshmi 是对的。当您使用 Hash.new([])
创建哈希时,您创建了一个数组对象。
因此,对于哈希中每个 缺失的键,返回相同 数组。
这就是为什么如果共享数组被编辑,更改会反射(reflect)在所有丢失的键上。
使用:
Hash.new { |h, k| h[k] = [] }
为哈希中每个缺失的键创建并分配一个新数组,使其成为一个唯一的对象。
关于ruby - 创建一个哈希值作为数组和默认值作为空数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30367487/
相关文章:
ruby-on-rails - Rails 分页 - 更快地计算总页数?
Ruby send(attribute.to_sym) for Rails 方法
ruby-on-rails - 在 Rails 中获取 "Incomplete response received from application"
ruby-on-rails - getaddrinfo : nodename nor servname provided, 或未知
ruby - 如何打印出包含 TAB 字符的 Ruby 文件中的行?
ruby-on-rails - rails 中的线程会自动打开数据库连接吗?