我试图动态地创建数组,并处理这些代码,但我什么也没有得到。
从locations开始
locations = {"boston" => 1, "new_york" => 2 , "miami" => 3}并使用:
locations.each {
|city, id| puts "#{city}_angels"
}期望的结果是初始化三个数组:boston_angels、new_york_angels、miami_angels。
发布于 2014-10-20 22:55:42
根据对这个问题的评论,有很多方法可以从可枚举的源中构造散列。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发布于 2014-10-21 00:26:46
这个问题与散列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"=>[]}https://stackoverflow.com/questions/26475925
复制相似问题