ハッシュがあり、値またはキーの1つを更新したい場合は、簡単にを使用できます。次.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
ようupdate
方法は、しかし新しい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
は更新していません。ドキュメント
によれば
はHSHにother_hashの内容を追加します。ブロックが指定されていない場合、重複キーを持つエントリはother_hashの値で上書きされます。そうでない場合は、キーを持つブロック、hshの値、other_hashの値を呼び出して重複キーの値を決定します。
ドキュメントのようにコピーしていますが、どうすれば更新できますか?
おかげ
EDIT
はいけない3つのパラメータを渡す
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
最初のスニペットでは、値の1つを更新していません。あなたはそれらの__all__を更新しています。 –
はい、申し訳ありません、それは私がやりたいことです。 – bill
@SergioTulentsev、編集したスニペットがうまくいかない理由は知っていますか?もちろん – bill