【问题标题】:Ruby hash direct access vs mergeRuby 哈希直接访问与合并
【发布时间】:2011-08-26 12:19:15
【问题描述】:

两者有什么区别:

@attr[:field] = new_value

@attr.merge(:field => new_value)

【问题讨论】:

  • 这不是特定于 rails 的,它是纯 ruby​​ afaik
  • 是的,过去常说 Rails,有时我会忘记什么是纯 Ruby,谢谢。

标签: ruby hash merge


【解决方案1】:

如果您使用merge! 而不是merge,则没有区别。
唯一的区别是您可以在合并参数中使用多个字段(意思是:另一个哈希)。

例子:

   h1 = { "a" => 100, "b" => 200 }
   h2 = { "b" => 254, "c" => 300 }
   h3 = h1.merge(h2)    
   puts h1         # => {"a" => 100, "b" => 200}
   puts h3         # => {"a"=>100, "b"=>254, "c"=>300}
   h1.merge!(h2)   
   puts h1         # => {"a"=>100, "b"=>254, "c"=>300}

在分配单个值时,出于可读性原因,我更喜欢h[:field] = new_val 而不是merge,并且我猜它比合并更快。

你也可以看看Hash-rdoc:http://ruby-doc.org/core/classes/Hash.html#M000759

【讨论】:

    【解决方案2】:

    但是他们做同样的事情:

    @attr[:field] = new_value
    

    效率更高,因为不需要哈希遍历。

    【讨论】:

      【解决方案3】:

      您可以使用非爆炸合并以函数式编程风格使用哈希。

      Ruby 函数式编程下有Don't update variables

      不要更新哈希

      没有:

      hash = {:a => 1, :b => 2}
      hash[:c] = 3
      hash
      

      是的:

      hash = {:a => 1, :b => 2}
      new_hash = hash.merge(:c => 3)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-06-15
        • 2013-05-14
        • 2014-04-09
        • 2012-01-14
        • 2019-02-21
        • 2019-08-08
        • 2013-04-18
        相关资源
        最近更新 更多