我试图动态创建数组并且正在搞乱这段代码,但我没有到达任何地方。
从locations
开始:
locations = {"boston" => 1, "new_york" => 2 , "miami" => 3}
使用:
locations.each {
|city, id| puts "#{city}_angels"
}
理想的结果是初始化三个数组:boston_angels
,new_york_angels
,miami_angels
。
答案 0 :(得分:2)
根据对问题的评论,有很多方法可以从源可枚举构造哈希。 each_with_object
是我的最爱之一:
locations.keys.each_with_object({}) {|city, out| out[city] = [] }
inject
/ reduce
是另一种选择:
locations.keys.inject({}) {|h, city| h[city] = []; h }
您还可以创建一个[city, []]
数组数组,然后将其转换为哈希:
Hash[*locations.flat_map {|city, id| [city, []] }]
或者如果您使用的是Ruby 2.1:
locations.keys.map {|k| [k, []] }.to_h
答案 1 :(得分:1)
这个问题与哈希location
的值无关,所以让我们从:
cities = locations.keys
#=> ["boston", "new_york", "miami"]
其他三种方法:
<强>#1 强>
Hash[cities.map { |c| [c, []] }]
#=> {"boston"=>[], "new_york"=>[], "miami"=>[]}
使用Ruby 2.1+,您可以将Hash[arr]
写为arr.to_h
。
<强>#2 强>
cities.reduce({}) { |h,city| h.merge({ city=>[] }) }
<强>#3 强>
h = Hash.new { |h,k| h[k] = [] }
h.values_at(*cities)
h
#=> {"boston"=>[], "new_york"=>[], "miami"=>[]}