用转换后的数据替换数组值?

时间:2012-01-13 19:57:21

标签: ruby arrays

我有这个时间值数组:

["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]

1 个答案:

答案 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