【问题标题】:Multiply the values of a hash by a number, and return 0 for the negative values将哈希值乘以一个数字,对于负值返回 0
【发布时间】:2020-02-09 23:01:25
【问题描述】:

如何将散列的 非负 数值乘以一个数字(例如: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}

【问题讨论】:

    标签: ruby ruby-hash


    【解决方案1】:

    您可以使用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} 
    

    【讨论】:

    • @Chris 这是一个更好的答案。
    【解决方案2】:

    怎么样

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

    【讨论】:

    • 效果很好 pjs。谢谢!
    • 应该注意,这是破坏性的(hash 已就地修改),考虑到问题并没有要求这样做。
    【解决方案3】:

    你可以试试这个

    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
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-30
      • 1970-01-01
      • 2014-11-14
      • 1970-01-01
      相关资源
      最近更新 更多