ruby - 使用 .update 更新值

标签 ruby

如果我们有一个散列并且我们想要更新其中一个值或键,我们可以轻松地使用 .update 方法,如下所示

def foo(params)
    params+=1
end

hsh = {:a=>1,:b=>2,:c=>3}

hsh.update(hsh) do |key,oldVal|
    foo(oldVal)
end

p hsh

但是假设有一个新的 hash,我想将它的属性复制到另一个 hash 中并将值加一。我将如何做到这一点?这是我的尝试

def foo(params)
    params+=1
end
new_hsh = {:a=>1,:b=>2,:c=>3}
hsh = {}
hsh.update(new_hsh) do |key,value,newVal|
    newVal = foo(value)
end

p hsh

输出 {:a=>1,:b=>2,:c=>3}。所以它复制了 new_hsh,但没有更新 value

根据文档

Adds the contents of other_hash to hsh. If no block is specified, entries with duplicate keys are overwritten with the values from other_hash, otherwise the value of each duplicate key is determined by calling the block with the key, its value in hsh and its value in other_hash.

所以它像文档所说的那样进行复制..但是我该如何更新它呢?

谢谢

编辑

尝试过

def foo(params)
    params+=1
end
new_hsh = {:a=>1,:b=>2,:c=>3}
hsh = {}
hsh.update(new_hsh) do |key,value,newVal|
    foo(newVal)
end

p hsh

最佳答案

这是另一个答案。这有效但也修改了 new_hsh。但是你需要在 hsh 上调用更新之前设置 hsh = new_hsh。

def foo(params)
params+=1
end

new_hsh = {:a=>1,:b=>2,:c=>3}
hsh = new_hsh
hsh.update(hsh) do |key,value|
    hsh[key] = foo(value)
end

p hsh

关于ruby - 使用 .update 更新值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39207068/

相关文章:

arrays - ruby 中有像 object.in(array) 这样的东西吗?

ruby - Ruby 是否支持类型提示?

ruby-on-rails - Rails 3、HTTP 扩展(WebDAV)和 Rack App 安装

php - 用于 PHP/Ruby 的 NetBeans IDE

ruby-on-rails - Activerecord 查询 .where 字符串作为数字

ruby - 如何覆盖 ruby​​ neo4j 节点主 ID

Ruby 打包器生成二进制文件

Ruby 依赖注入(inject)库

ruby - 调节三态逻辑

ruby-on-rails - 我收到错误 'Unknown key for a VALUE_STRING in [q]'