我有两个哈希,看起来像这样:
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)
我想知道标准库中是否有一个方法来执行此操作,或者是否可以使用更少的代码完成此操作.
你想要一个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)