如果我们有一个散列并且我们想要更新其中一个值或键,我们可以轻松地使用 .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/