我有一个对象,它有name
和data
等属性。我想创建一个散列,它使用名称作为键,数据(这是一个数组)作为值。我不知道如何使用map
减少下面的代码。有可能吗?
def fc_hash
fcs = Hash.new
self.forecasts.each do |fc|
fcs[fc.name] = fc.data
end
fcs
end
发布于 2013-04-03 02:55:44
使用Hash[]
Forecast = Struct.new(:name, :data)
forecasts = [Forecast.new('bob', 1), Forecast.new('mary', 2)]
Hash[forecasts.map{|forecast| [forecast.name, forecast.data]}]
# => {"mary"=>2, "bob"=>1}
发布于 2013-04-03 02:56:11
def fc_hash
forecasts.each_with_object({}) do |forecast, hash|
hash[forecast.name] = forecast.data
end
end
发布于 2013-04-03 03:53:59
我总是使用inject
或reduce
来完成以下操作:
self.forecasts.reduce({}) do |h,e|
h.merge(e.name => e.data)
end
https://stackoverflow.com/questions/15772036
复制相似问题