我有这个时间值数组:
["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]
答案 0 :(得分: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