1

我有这些哈希:

{"a" => 1, "b" => 2, "c" => 3, "k" => 14}
{"b" => 51, "c" => 2, "d"  => 8}

我需要编写代码,以便在操作之后,结果将是:

{"a" => 1, "b" => 51, "c" => 2, "k" => 14}

我试过了:

h1.each do |h, j|
  h2.each do |hh, jj|
    if h == hh
      j = jj
    end
  end
end

但它不起作用。另外我认为这是丑陋的代码,那么它怎么能写得更好/正确呢?

我虽然应该比较两个散列,如果第二个键与第一个键相同,则将第一个散列值更改为第二个散列值。

4

1 回答 1

1

只需遍历条目并仅在相应条目已存在时h2更新相应条目:h1

h2.each { |k,v| h1[k]=v if h1.include?(k) }
h1 # => {"a"=>1, "b"=>51, "c"=>2, "k"=>14 }

此外,如果您想更新上述条目并添加新条目,h2您可以简单地使用以下Hash#merge!方法

h1.merge!(h2)
h1 # => {"a"=>1, "b"=>51, "c"=>2, "k"=>14, "d"=>8}
于 2013-09-20T16:42:01.913 回答