我有一個對象,其中包括屬性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