2012-01-13 41 views
0

我有此數組時間值:用轉換的數據替換數組值?

["00:04:48.563044", "00:05:29.835918", "00:09:38.622569"] 

但我需要通過解析器(在這種情況下,chronic_duration)通過每個陣列的項目,然後吐出背出在一個數組。

所以每個數組項目將需要得到穿過:

ChronicDuration.parse('00:04:48.563044') 

然後放回一個數組:

[288.563044, 329.835918, 578.622569] 

回答

5

兩個顯而易見的選擇;新陣列或就地。

pry(main)> arr = ["00:04:48.563044", "00:05:29.835918", "00:09:38.622569"]; 
pry(main)> arr.collect! { |s| ChronicDuration.parse s } 
=> [288.563044, 329.835918, 578.622569] 

要創建一個新的陣列,在collect呼叫離開過感嘆號("!"):

pry(main)> new_arr = arr.collect { |s| ChronicDuration.parse s } 

你可能想從一個映射到其他:

pry(main)> h = Hash[arr.collect { |s| [s, ChronicDuration.parse(s)] }] 
=> {"00:04:48.563044"=>288.563044, 
"00:05:29.835918"=>329.835918, 
"00:09:38.622569"=>578.622569} 

或者切換鍵/值以便於分類;要麼切換collect陣列,要麼反轉:

pry(main)> h.invert.keys.sort.each_with_index {|k, i| puts "#{i+1}: #{h[k]}"} 
1: 00:04:48.563044 
2: 00:05:29.835918 
3: 00:09:38.622569