通过哈希循环,无法更新值

时间:2014-02-14 22:20:51

标签: ruby-on-rails ruby enumeration

我正在尝试遍历此哈希,如果值为nil,则将其设为空字符串。

怎么了?

my_hash = { "one"=>"foo", "two"=>"bar", "three"=>nil}

my_hash.each {|k,v| if v==nil then v="" end}

1 个答案:

答案 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]