如果我们有哈希并且我们想要更新其中一个值或键,我们可以轻松使用。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
并将值加1。我怎么会这样做?这是我的尝试
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
。
根据文件
将other_hash的内容添加到hsh。如果未指定任何块,则使用来自other_hash的值覆盖具有重复键的条目,否则通过使用键调用块,将其值设置为hsh并将其值设置为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
答案 0 :(得分:1)
不要传递3个参数。就像这样传递2。迭代new_hsh的每个键值对,并在传递给foo方法并将其推入hsh后将键设置为等于新值。
def foo(params)
params+=1
end
new_hsh = {:a=>1,:b=>2,:c=>3}
hsh = {}
new_hsh.each do |key,value|
hsh[key] = foo(value)
end
p hsh
答案 1 :(得分:1)
这是另一个答案。这可以工作,但也修改new_hsh。但是你需要在调用hsh上的update之前设置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