收集ruby修改原始数据的解决方案?

时间:2014-08-20 23:39:43

标签: ruby collections map

我在这里有一些简单的代码,我从哈希中获取数据并推入数组并使用collect调用来修改数组。但是,在程序结束时,我的原始哈希正在被修改。我理解Ruby使用引用,但我不确定我哪里出错了。

hash = Hash.new
hash ={"a" => "2.3M", "b" => "1.2B"}

revenue = []

revenue << hash["a"]
revenue << hash["b"]

revenue.collect! do |rev|
    if rev.include? "B"
        rev = rev.gsub!("B","").to_f * 1000000000
    elsif rev.include? "M"
        rev = rev.gsub!("M","").to_f * 1000000
    else
        rev = rev
    end
end

p revenue # => [2300000.0, 1200000000.0]
p hash # => {"a"=>"2.3", "b"=>"1.2"} Why do the M and B dissapear? 

谢谢你们!

1 个答案:

答案 0 :(得分:0)

忽略!中的gsub!。这样gsub将在修改字符串之前复制字符串。