从具有数组键的哈希创建哈希类常量

时间:2015-04-21 16:52:08

标签: ruby

我有一个带有常量的类,它是一个哈希:

  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

3 个答案:

答案 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] }]