我有一个对象,其中包括属性name
和data
等等。我想创建一个使用名称作为键和数据(这是一个数组)作为值的散列。我无法弄清楚如何使用map
来减少下面的代码。可能吗?创建哈希迭代对象数组
def fc_hash
fcs = Hash.new
self.forecasts.each do |fc|
fcs[fc.name] = fc.data
end
fcs
end
我有一个对象,其中包括属性name
和data
等等。我想创建一个使用名称作为键和数据(这是一个数组)作为值的散列。我无法弄清楚如何使用map
来减少下面的代码。可能吗?创建哈希迭代对象数组
def fc_hash
fcs = Hash.new
self.forecasts.each do |fc|
fcs[fc.name] = fc.data
end
fcs
end
使用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}
def fc_hash
forecasts.each_with_object({}) do |forecast, hash|
hash[forecast.name] = forecast.data
end
end
对于'each_with_object' +1,一个很好的方法。 –
@theTinMan:谢谢,我也喜欢这种方法:) – apneadiving
是的,你们俩看起来都非常迷恋它:p –
我总是用inject
或reduce
此:
self.forecasts.reduce({}) do |h,e|
h.merge(e.name => e.data)
end
'map'返回一个数组,并不会返回哈希值。但是那就是说,这段代码没有任何问题。为什么不像你拥有它一样使用它? –
哈希[* self.forecasts.map {[fc.name,fc.data]}。flatten] – Abid
什么是'预测'?特别是,它的课程是什么? – sawa