【发布时间】:2022-01-08 03:57:37
【问题描述】:
我有以下哈希:
hash = {2021=>{:gastosCompra=>0}, 2022=>{:gastosCompra=>0}, 2023=>{:gastosCompra=>0}}
如下创建
headers = {
gastosCompra: 'gastos compra',
}
elements = headers.inject({}) { |h, (k, _v)| h[k] = 0; h }
hash = Hash[years.collect { |item| [item, elements] }]
我正在尝试更新 gastosCompra 的 key year 2021。我试过merge、deep_merge,但不幸的是所有其他键也都更新了:
hash[year][:gastosCompra] = 555
hash[year].merge!({gastosCompra: 555})
hash[year].deep_merge!({gastosCompra: 555})
这是结果:
hash = {2021=>{:gastosCompra=>555}, 2022=>{:gastosCompra=>555}, 2023=>{:gastosCompra=>555}}
如果我只想更新 2021 年,为什么要更新所有嵌套的哈希?我想我可以遍历键并在找到 2021 年时停止,但我想避免这种情况。
【问题讨论】:
-
我敢打赌,所有的值实际上都是同一个对象。检查
hash.values.map(&:object_id)。如果都一样,请告诉我们你是如何生成哈希的 -
您为什么要使用多年未维护的 Ruby on Rails 版本?另外,这与 Ruby on Rails 有什么关系?
-
抱歉,标签错误。
-
是的,所有对象都具有相同的对象 ID。问题不在更新时,而是在创建时
-
问题在这里
Hash[years.collect { |item| [item, elements] }]。我最终循环并为嵌套哈希创建了新对象。不错的选择,非常感谢您指出@BroiSatse
标签: ruby-on-rails ruby hash