通过键加入两个Ruby哈希

msa*_*yen 0 ruby hash

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

h1 = {key1: 'Roses are', key2: 'Violets are'}
h2 = {key1: 'Red', key2: 'Blue'}
Run Code Online (Sandbox Code Playgroud)

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

result = {'Roses are' => 'Red', 'Violets are' => 'Blue'}
Run Code Online (Sandbox Code Playgroud)

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

result = {}
h1.each { |key, value| result[value] = h2[key] }
Run Code Online (Sandbox Code Playgroud)

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

Ste*_*fan 5

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

h1.map { |k, v| ... }
Run Code Online (Sandbox Code Playgroud)

来自的值h1成为新键:

h1.map { |k, v| [v, ...] }
Run Code Online (Sandbox Code Playgroud)

相应的值h2成为新值:

h1.map { |k, v| [v, h2[k]] }
#=> [["Roses are", "Red"], ["Violets are", "Blue"]]
Run Code Online (Sandbox Code Playgroud)

和to_h转换这回哈希:

h1.map { |k, v| [v, h2[k]] }.to_h
#=> {"Roses are"=>"Red", "Violets are"=>"Blue"}
Run Code Online (Sandbox Code Playgroud)