Ruby哈希直接访问vs合并

时间:2011-05-16 14:36:23

标签: ruby hash merge

之间有什么区别:

@attr[:field] = new_value

@attr.merge(:field => new_value)

3 个答案:

答案 0 :(得分:7)

如果您使用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

答案 1 :(得分:2)

然而,他们做了同样的事情:

@attr[:field] = new_value

更有效,因为不需要散列遍历。

答案 2 :(得分:0)

您可以使用非爆炸合并在函数式编程风格中使用散列。

Ruby Functional Programming在Don't update variables

  

不要更新哈希

     

没有

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

是:

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