我有一個散列這樣的數據:我該如何將這個Ruby哈希轉換爲數組?
[{"total_time"=>"00:04:48.563044"}, {"total_time"=>"00:05:29.835918"}, {"total_time"=>"00:09:38.622569"}]
但我想這一點:
["00:04:48.563044", "00:05:29.835918", "00:09:38.622569"]
需要使用Ruby 1.8.7工作。
我有一個散列這樣的數據:我該如何將這個Ruby哈希轉換爲數組?
[{"total_time"=>"00:04:48.563044"}, {"total_time"=>"00:05:29.835918"}, {"total_time"=>"00:09:38.622569"}]
但我想這一點:
["00:04:48.563044", "00:05:29.835918", "00:09:38.622569"]
需要使用Ruby 1.8.7工作。
你可能會與此管理:
list.collect(&:values).flatten
有一噸的方式來做到這一點。讓我們把它分解成你需要完成的基本步驟:
既然你想抓住每個項目的結果,而不只是看它,你會想要使用map
(或collect
,他們是現實相同的方法)。這將處理步驟1和步驟3.步驟2本身非常簡單。您只需要獲得item['total_time']
的密鑰值。把它放在一起,和你有這樣的:
times.map{ |time| time['total_time'] }
談到一噸的方式來實現這一點:
a = [{"total_time"=>"00:04:48.563044"}, {"total_time"=>"00:05:29.835918"}, {"total_time"=>"00:09:38.622569"}]
p a.map(&:flatten).map(&:last)
這不適用於1.8.7('Hash'沒有'flatten')。 – 2012-01-13 20:37:56
@undur_gongor然後請把它當作好奇心 – maprihoda 2012-01-13 20:45:44
'collect'是一樣的'map'對於那些不太熟悉紅寶石。此外,可以使用「collect!」或「map!」來對對象進行變異,而不是創建新對象。 – Nick 2012-01-13 19:15:49
這太複雜了,一個簡單的地圖會做... – tokland 2012-01-13 19:40:45
在這個非常特殊的情況下,map調用可能更簡單,但是我發佈的這個片段是一個適用於各種環境的通用模式。這是「給我從一維數組中的多個散列值」的方法。 – tadman 2012-01-13 20:32:12