Ruby - 根据匹配值合并两个没有相似键的哈希值

时间:2016-06-01 23:30:52

标签: ruby

我想找到一种将两个哈希合并在一起的有效方法,结果哈希必须包含基于以下条件的所有原始数据和新的键/值对。两个哈希之间没有共同的键,但是一个哈希中的键与相邻哈希中键的值匹配。

另请注意,第二个哈希实际上是一个哈希数组。

我正在处理一个相对较大的数据集,因此寻找一个有效的解决方案,但希望同时保持代码可读,因为它可能最终会投入生产。

以下是我的数据结构:

# 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上得到了解答,但我找了一段时间,找不到匹配项。如果这是重复的话我会提前道歉。

2 个答案:

答案 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 =>值对。我不认为它会对性能产生巨大影响,除非你的数据集大到足以占用分配给你的应用程序的大部分内存。