Умножьте значения га sh на число и верните 0 для отрицательных значений. - PullRequest
1 голос
/ 10 февраля 2020

Как мне умножить неотрицательные числовые значения га sh на число (например: 2), а для отрицательных значений просто вернуть 0?

Например, с этим га sh (с ключами переменных лет):

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}

Ответы [ 3 ]

2 голосов
/ 10 февраля 2020

Вы можете использовать Hash # transform_values ​​ (введено в Ruby v2.4):

hash = {"year2020"=>"-2.0", "year2021"=>"3.0", "year2022"=>"1.0" }

hash.transform_values { |v| [2*v.to_f, 0].max }
  #=> {"year2020"=>0, "year2021"=>6.0, "year2022"=>2.0} 
2 голосов
/ 10 февраля 2020

Как насчет

hash.each do |key, value|
  v = value.to_f
  hash[key] = v <= 0 ? 0.0 : 2.0 * v
end
0 голосов
/ 10 февраля 2020

Вы можете попробовать это

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

...