我想找到一种将两个哈希合并在一起的有效方法,结果哈希必须包含基于以下条件的所有原始数据和新的键/值对。两个哈希之间没有共同的键,但是一个哈希中的键与相邻哈希中键的值匹配。
另请注意,第二个哈希实际上是一个哈希数组。
我正在处理一个相对较大的数据集,因此寻找一个有效的解决方案,但希望同时保持代码可读,因为它可能最终会投入生产。
以下是我的数据结构:
# Hash
hsh1 = { "devicename1"=>"active", "devicename2"=>"passive", "devicename3"=>"passive" }
# Array of Hashes
hsh2 = [ { "host" => "devicename3", "secure" => true },
{ "host" => "devicename2", "secure" => true },
{ "host" => "devicename1", "secure" => false } ]
以下是我需要完成的事情:
我需要将hsh1
中的数据合并到hsh2
中,保留hsh2
中的所有原始键/值对,并使用以下内容添加名为activation_status
的新密钥hsh1
中的数据。
结果hsh2
如下:
hsh2 = [{ "host"=>"devicename3", "secure"=>true, "activation_status"=>"passive" },
{ "host"=>"devicename2", "secure"=>true, "activation_status"=>"passive" },
{ "host"=>"devicename1", "secure"=>false, "activation_status"=>"active" }]
这可能已经在StackOverflow上得到了解答,但我找了一段时间,找不到匹配项。如果这是重复的话我会提前道歉。
答案 0 :(得分:3)
我建议采取以下措施:
$( document ).ready(function() {
$('button').eq(0).trigger('click');
});
当然你可以缩小一点。此版本使用较少的变量和hash3 = hash2.map do |nestling|
host = nestling["host"]
status = hash1[host]
nestling["activation_status"] = status
nestling
end
hash2
答案 1 :(得分:1)
这样做:
hsh2.map { |h| h.merge 'activation_status' => hsh1[h['host']] }
但是,我认为它会复制数据而不是仅仅散列哈希数组并添加适当的key =>值对。我不认为它会对性能产生巨大影响,除非你的数据集大到足以占用分配给你的应用程序的大部分内存。