【问题标题】:How can I triple all hash values using #each?如何使用#each 将所有哈希值增加三倍?
【发布时间】:2012-07-07 09:05:03
【问题描述】:

我有一个哈希如下:

drinks = {"soda" => 3, "water" => 2, "beer" => 6}

我想通过使用each 来显示每对的价值增加了​​三倍。

换句话说,我希望“苏打水”的值为 9,“水”的值为 6,等等。

【问题讨论】:

    标签: ruby hash each


    【解决方案1】:

    Hash[hash.map { |k,v| [k, v * 3] }]

    【讨论】:

    • Hash[hash.map { |k,v| [k, v * 3] }] 就足够了,你不需要压扁和喷溅。
    • 曾几何时,您确实需要所有的压扁和喷溅。我很高兴他们解决了这个问题。
    • 对于那些想要更简洁的人来说,方面!:hash.mash { |k, v| [k, 3*v] }。仍在努力使其进入核心,但到目前为止还没有运气。
    • 这是正确答案。 each 是这里的错误工具。
    【解决方案2】:

    有多种方法可以做到这一点,具体取决于您想要的语义。一种方法是使用Hash#each 对每个键/值对进行操作。例如:

    drinks = {"soda"=>3, "water"=>2, "beer"=>6}
    drinks.each { |key, value| drinks[key] = value.to_i * 3 }
    => {"soda"=>9, "water"=>6, "beer"=>18}
    

    【讨论】:

    • @user937531:你确定要销毁原来的drinks数组吗?如果您就地更新变量,则更难以推理函数...
    【解决方案3】:
    drinks = Hash[­drink­s.map { |dri­nk, value­| [drin­k, value­ * 3] }]
    

    【讨论】:

      【解决方案4】:
      drinks.each_with_object({}) { |(k,v),h| h[k] = 3 * v }   
        => {"soda"=>9, "water"=>6, "beer"=>18} 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-20
        • 1970-01-01
        • 2013-07-03
        • 1970-01-01
        • 2011-10-24
        相关资源
        最近更新 更多