我需要一些克隆哈希属性的帮助。
我有X个哈希值的数组B
,A = [
{"v1"=>{"description"=>"abc", "export_value"=>"2"}},
{"v2"=>{"description"=>"cba", "export_value"=>"2"}}
]
B = [
{"v1"=>{"description"=>"", "export_value"=>"3"}},
{"v2"=>{"description"=>"", "export_value"=>"5"}}
]
(目前为2):
B
Ruby中是否有任何方法(某些函数或任何东西)可以将某些属性从一个哈希克隆到另一个哈希。
例如,我想克隆" export_values"从数组A
到C = [
{"v1"=>{"description"=>"abc", "export_value"=>"3"}},
{"v2"=>{"description"=>"cba", "export_value"=>"5"}}
]
的属性,因此最终的哈希数组看起来像:
export http_proxy="http://user:pass@proxy.foo.bar"
答案 0 :(得分:1)
你可以这样做:
A.map.with_index do |h, i|
h.merge(B[i]) do |_, hash_from_A, hash_from_B|
hash_from_A.merge(hash_from_B) do |k, o, n|
k == "export_value" ? n : o
end
end
end
#=> [{"v1"=>{"description"=>"abc", "export_value"=>"3"}},
# {"v2"=>{"description"=>"cba", "export_value"=>"5"}}]
如果您的应用可以访问Rails Active Support gem,那么您可以使用Hash#deep_merge
简化上述代码。
require "active_support/core_ext/hash"
A.map.with_index do |h, i|
h.deep_merge(B[i]) do |k, o, n|
k == "export_value" ? n : o
end
end