Ruby:使用来自其他哈希的匹配值来交换哈希密钥

时间:2016-02-24 10:42:25

标签: ruby hash replace

我有这些哈希:

JavaScript

我想将id引用替换为与第二个哈希中的id关联的名称,如果hash = {1 => "popcorn", 2 => "soda"} other_hash = {1 => "dave", 2 => "linda", 3 => "bobby_third_wheel"} 中有一条没有任何内容匹配的记录,则应该将其删除到生成的哈希中。像这样:

other_hash

4 个答案:

答案 0 :(得分:3)

您可以在" primary"上轻松使用此each_with_object方法带名字的哈希。

other_hash.each_with_object({}) { |(id, name), h| h[name] = hash[id] if hash.key?(id) }
# => {"dave"=>"popcorn", "linda"=>"soda"}

答案 1 :(得分:3)

hash.each_with_object({}){|(k,v), res| res[other_hash[k]] = v}
# => {"dave"=>"popcorn", "linda"=>"soda"}

答案 2 :(得分:2)

首先,使用模式Continent,最后是enumerable.map { expr if condition }.compact的“数组理解”。

Array#to_h

此外:

h = other_hash.map { |k, v| [v, hash[k]] if hash.has_key?(k) }.compact.to_h
#=> {"dave"=>"popcorn", "linda"=>"soda"}

答案 3 :(得分:2)

hash.map{|k, v| [other_hash[k], v]}.to_h
# => {"dave"=>"popcorn", "linda"=>"soda"}