仅在两个散列中都存在键的情况下将散列值从一个散列复制到另一个散列?



如何将一个散列中的值复制到另一个散列中,但仅适用于存在于两个散列中的键?

最小的例子

h1 = {a: 10, b: 20, c: 30}
h2 = {a: nil, c: nil}
## desired result
{a: 10, c: 30}

我已经用"手动"方法解决了-即{a: h1[:a], c: h1[:c]}-但它是冗长的,看起来更糟的键有。我肯定有更优雅的东西。

您可以这样做。

h1 = { a: 10, b: 20, c: 30 }
h2 = { a: nil, c: nil, d: nil }
h1.slice(*h2.keys)
#=> {:a=>10, :c=>30}

看到散列#片。

请注意,上面的例子与问题中的例子不同,因为我在h2(:d)中添加了h1中不存在的键。

手册;带有循环的方法看起来像这样

h1.each do |k, v|
h2[k] = v if h2.include? k
end

如果您的目标是创建一个新的散列,而不是修改现有的散列,您可以使用filter(在旧版本的Ruby中称为select)

h1.filter { |k, v| h2.include? k }

或者,如果您想修改h1,只使用k2的密钥,您可以使用filter!(在旧版本中称为select!),它的工作原理与filter类似,但可以就地修改。

h1.filter! { |k, v| h2.include? k }

相关内容

  • 没有找到相关文章

最新更新