0

Rubyを使用して値を組み合わせる必要があるハッシュの2つのハッシュがあります

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

また、Darshan で示されているように、文字列ではなく fixnum を使用するように 2 番目のハッシュを更新しました。

すべてのポインタをありがとう!

4

2 に答える 2

1

ハッシュに有効な変数名を与え、ハッシュを閉じ、2 番目のハッシュにトップレベル キーの文字列ではなく Fixnum を使用させると、これはあなたが望むことを行うように見えます:

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"}}
于 2013-05-13T23:23:19.987 に答える
0

このようなもの...

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

内部ハッシュをマージする必要があります。

于 2013-05-13T22:54:35.863 に答える