当前位置: 首页 > 知识库问答 >
问题:

Ruby -基于匹配值合并两个没有相似关键字的散列

古彦
2023-03-14

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

还要注意,第二个散列实际上是一个散列数组。

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

以下是我的数据结构:

# 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中的所有原始键/值对,并使用hsh1中的数据添加一个名为activation_status的新键。

生成的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个答案

钮瀚
2023-03-14

这将做到:

hsh2.map { |h| h.merge 'activation_status' => hsh1[h['host']] }

但是,我认为它会复制数据,而不是只是遍历哈希数组并添加适当的键=

颛孙正谊
2023-03-14

我建议如下:

hash3 = hash2.map do |nestling|
  host = nestling["host"]
  status = hash1[host]
  nestling["activation_status"] = status
  nestling
end

当然,你可以缩小一点。此版本使用更少的变量并就地编辑<code>hash2</code>:

hash2.each do |nestling|
  nestling["activation_status"] = hash1[nestling["host"]]
end
 类似资料:
  • 我有两个哈希要合并。它们看起来像这样: 第二个散列看起来像: 我想合并这两个散列数组,结果如下所示: 有没有一种简单的方法来合并这两个哈希,或者我必须逐个遍历哈希并在另一个哈希中找到该键?

  • 问题内容: 众所周知,C#提供了一个AS关键字,该关键字会自动执行一次检查,检查对象是否属于某种类型,如果是,则将其强制转换为所需的类型,否则给出null。 在上面的示例中,这里的Object obj可以是User类型或其他类型。用户将获得User类型的对象或null。这是因为C#的As关键字首先执行检查,然后在可能的情况下将对象强制转换为结果类型。 那么Java中有没有与C#的AS关键字等效的关

  • 首先,感谢您帮助我解决SQL问题。 现在我正在为另一件事而苦苦挣扎,这让我想我是否应该放弃做一个程序员。 无论如何,我的问题是:我有一个哈希数组(在该哈希数组中还有另一个),如下所示: 我试图实现的是,如果有两个具有相同键的值,即“A1”将这些值添加到一个完整的哈希中,而不会覆盖旧值并将月份作为所需的键输出: 这是可能的吗?

  • 我有两个数组: 阵列 1: 和阵列 2: 我需要根据合并这两个数组并得到这个: 不通过< code>Object.keys进行迭代,我如何做到这一点?

  • 问题内容: 我有以下两个玩具字典 我想得到一个唯一的字典,在其中我将第二个字典值堆叠在第一个字典之后,并放在相同的方括号内。 我尝试了以下代码 但是我获得的输出在每个键的列表中有两个列表,即 而我想获得 如何使用一行或两行代码来实现? 问题答案: 您几乎拥有了它,而是使用了附加两个列表的方法:

  • 我有一个示例数据集,如下所示 Col1 Col2 Col3 A 1,2,3 A123 A 4,5 A456 A 1,2,3 A456 A 4,5 A123 我参考了一些解决方案,并尝试了以下方法。但它只追加单个列。