Ruby 将散列值乘以一个数字,并返回0作为负值

Ruby 将散列值乘以一个数字,并返回0作为负值,ruby,ruby-hash,Ruby,Ruby Hash,如何将散列的非负数值乘以一个数字,例如:2,对于负数,只返回0 例如,使用此具有可变年份键的哈希: hash = {"year2020" => "-2.0", "year2021" => "3.0", "year2022" => "1.0",...} 结果将是:-2.0给出0.0,3.0*2=6.0,1.0*2=2.0 result = {"year2020" => "0.0", "year2021" => "6.0", "year2022" => "2.0

如何将散列的非负数值乘以一个数字,例如:2,对于负数,只返回0

例如,使用此具有可变年份键的哈希:

hash = {"year2020" => "-2.0", "year2021" => "3.0", "year2022" => "1.0",...}
结果将是:-2.0给出0.0,3.0*2=6.0,1.0*2=2.0

result = {"year2020" => "0.0", "year2021" => "6.0", "year2022" => "2.0",...}
我试过了,但我不知道如何得到0而不是负值:

hash.map { |k, v| [k, v.to_f * 2] }.to_h
=> {"year2020"=>-4.0, "year2021"=>6.0, "year2022"=>2.0}
怎么样

hash.each do |key, value|
  v = value.to_f
  hash[key] = v <= 0 ? 0.0 : 2.0 * v
end
怎么样

hash.each do |key, value|
  v = value.to_f
  hash[key] = v <= 0 ? 0.0 : 2.0 * v
end
您可以使用Ruby v2.4中介绍的:

hash = {"year2020"=>"-2.0", "year2021"=>"3.0", "year2022"=>"1.0" }
您可以使用Ruby v2.4中介绍的:

hash = {"year2020"=>"-2.0", "year2021"=>"3.0", "year2022"=>"1.0" }
你可以试试这个

hash.each do |key,value|
    if value.to_f>=0.0
        hash[key]=(value.to_f*2.0).to_s
    else
        hash[key]="0.0"
    end   
end

你可以试试这个

hash.each do |key,value|
    if value.to_f>=0.0
        hash[key]=(value.to_f*2.0).to_s
    else
        hash[key]="0.0"
    end   
end


睡衣很好用。非常感谢。应该注意的是,考虑到问题并没有要求这样做,这是一个破坏性的hash被修改到位了。非常感谢。应该注意的是,考虑到问题没有要求这样做,这是一个破坏性的哈希被修改了。@Chris这是一个更好的答案。@Chris这是一个更好的答案。