我有一个带有常量的类,它是一个哈希:
class ServiceMap
MARKET_MAP =
{
"Fords" => [11,2,43],
"Edison" => [3,15]
}
end
我想动态生成一个新的常量,看起来像这样:
CODE_MAP = {
11: "Fords",
2: "Fords",
43: "Fords",
3: "Edison",
15: "Edison"
}
到目前为止,我已经有了这段代码,但却无法找到正确的方法,以及从带数组键的哈希创建哈希的最佳方法。
def self.CODE_MAP
@CODE_MAP ||= MARKET_MAP.inject({}){ do_something }
end
答案 0 :(得分:2)
CODE_MAP = MARKET_MAP.reduce({}) do |memo,(k,v)|
v.each { |x| memo[x] = k }
memo
end
# => {
# 11: "Fords",
# 2: "Fords",
# 43: "Fords",
# 3: "Edison",
# 15: "Edison"
# }
答案 1 :(得分:2)
您可以使用Enumberable#each_with_object
MARKET_MAP.each_with_object({}) do |(name, num_arr), hash|
num_arr.each { |num| hash[num] = name }
end
=> {11=>"Fords", 2=>"Fords", 43=>"Fords", 3=>"Edison", 15=>"Edison"}
答案 2 :(得分:1)
我会写:
Hash[MARKET_MAP.flat_map{|x,y| y.product [x] }]