我正在尝试遍历此哈希,如果值为nil,则将其设为空字符串。
怎么了?
my_hash = {
"one"=>"foo",
"two"=>"bar",
"three"=>nil}
my_hash.each {|k,v| if v==nil then v="" end}
答案 0 :(得分:5)
v是本地块变量 - 它评估到散列对中的值,但是与
您需要使用my_hash[k] = ""
对实际哈希对象造成副作用。
在迭代过程中改变散列的替代方法(只要密钥不被更改,这是正常的)是使用“功能”方法来创建新的散列。这是供参考;不一定是转换方法的论据。
# for each pair in the hash, yield a corresponding output pair
result = my_hash.map do |k,v|
[k, if v.nil? then "" else v]
end
# create a new hash from the result, which is [[k,v],..]
my_hash = Hash[result]