通过键

时间:2017-10-11 11:19:14

标签: ruby hash

我有两个看起来像这样的哈希:

h1 = {key1: 'Roses are', key2: 'Violets are'}
h2 = {key1: 'Red', key2: 'Blue'}

我想通过密钥加入它们,以便我得到这样的哈希:

result = {'Roses are' => 'Red', 'Violets are' => 'Blue'}

我有一些代码可以解决问题:

result = {}
h1.each { |key, value| result[value] = h2[key] }

我想知道标准库中是否有一个方法来执行此操作,或者是否可以使用更少的代码完成此操作。

2 个答案:

答案 0 :(得分:5)

你想要一个1:1的映射,所以map可以工作:

h1.map { |k, v| ... }

h1的值成为新密钥:

h1.map { |k, v| [v, ...] }

h2的相应值成为新值:

h1.map { |k, v| [v, h2[k]] }
#=> [["Roses are", "Red"], ["Violets are", "Blue"]]

并且to_h将其转换为哈希值:

h1.map { |k, v| [v, h2[k]] }.to_h
#=> {"Roses are"=>"Red", "Violets are"=>"Blue"}

答案 1 :(得分:1)

压缩值:

h1 = {key1: 'Roses are', key2: 'Violets are'}
h2 = {key1: 'Red', key2: 'Blue'}
result = h1.values.zip(h2.values).to_h