繁体   English   中英

使用Ruby将2个哈希值合并为1个

[英]Merge values of 2 hashes into 1 using Ruby

我有2个哈希值,需要使用Ruby对值进行合并

hoh = Hash.new
hoh = {"bob::params::search_vol_grp"=>{2=>{"search_group_id"=>2, "vol_ids"=>"2,627,628", "num_shards"=>32, "num_replicas"=>1}, 3=>{"search_group_id"=>3, "vol_ids"=>"3,629,630", "num_shards"=>32, "num_replicas"=>1}, 4=>{"search_group_id"=>4, "vol_ids"=>"4,631,632", "num_shards"=>32, "num_replicas"=>1}}
hob = Hash.new
hob = {"bob::params::search_q_broker"=>{2=>{"master_host"=>"hq01p1", "master_port"=>"61616", "slave_host"=>"hq01p2", "slave_port"=>"61616"}, 3=>{"master_host"=>"hq01p1", "master_port"=>"61616", "slave_host"=>"hq01p2", "slave_port"=>"61616"}, 4=>{"master_host"=>"hq01p1", "master_port"=>"61616", "slave_host"=>"hsq01p2", "slave_port"=>"61616"}}

我要结束的是以下内容-

hon = Hash.new
hon = {"bob::params::search"=>{2=>{"master_host"=>"hq01p1", "master_port"=>"61616", "slave_host"=>"hq01p2", "slave_port"=>"61616", "search_group_id"=>2, "vol_ids"=>"2,627,628", "num_shards"=>32, "num_replicas"=>1}, 3=>{"master_host"=>"hq01p1", "master_port"=>"61616", "slave_host"=>"hq01p2", "slave_port"=>"61616", "search_group_id"=>3, "vol_ids"=>"3,629,630", "num_shards"=>32, "num_replicas"=>1}, 4=>{"master_host"=>"hq01p1", "master_port"=>"61616", "slave_host"=>"hq01p2", "slave_port"=>"61616", "search_group_id"=>4, "vol_ids"=>"4,631,632", "num_shards"=>32, "num_replicas"=>1}}

我已经尝试了各种使用合并和合并的尝试! 但都没有产生我想要的最终结果。

有小费吗?

编辑根据拉里的建议,我可以通过以下方法实现我想要的功能

hon = Hash.new
hon['bob::params::search'] = Hash.new
hoh.each do |key,value|
  value.each do |k, v|
    hon['bob::params::search'][k] = hoh['bob::params::search_vol_grp'][k].merge! (hob['bob::params::search_q_broker'][k])
  end
end

我还更新了第二个哈希,以使用一个Fixnum而不是Darshan指示的字符串。

感谢所有的指针家伙!

为您的哈希提供有效的变量名,关闭哈希,并使第二个哈希使用Fixnum而不是String作为顶级键,这似乎可以满足您的要求:

h1 = {2=>{"search_group_id"=>2, "vol_ids"=>"2,627,628", "num_shards"=>32,
          "num_replicas"=>1}}
h2 = {2=>{"master_host"=>"hsrchq01p1", "master_port"=>"61616",
           "slave_host"=>"hsrchq01p2", "slave_port"=>"61616"}}

h1.merge(h2){|key, first, second| first.merge(second)}
# => {2=>{"search_group_id"=>2, "vol_ids"=>"2,627,628", "num_shards"=>32,
#         "num_replicas"=>1, "master_host"=>"hsrchq01p1", "master_port"=>"61616",
#         "slave_host"=>"hsrchq01p2", "slave_port"=>"61616"}}

像这样

1[2].merge(2[2])

您需要合并内部哈希。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM