在ruby中,我有一个带字符串值的数组:
my_array=["210,207,203,199,169,165,159,152,148,144,140,137"]
如何将其转换为这样的普通数组:
my_array=[210,207,203,199,169,165,159,152,148,144,140,137]
注意:所有元素都是非负值。
我知道我可以通过手动修剪双引号来做到这一点,但我想知道是否有更优雅的方式来实现它?
答案 0 :(得分:10)
我认为这应该有效:
my_array = my_array[0].split(',').map(&:to_i)
答案 1 :(得分:7)
扩展davidrac的回答,您也可以使用String#scan
代替String#split
:
my_array = my_array[0].scan(/\d+/).map(&:to_i)
修改强>
这个明确的基准显示String#scan
较慢:
require 'benchmark'
string = "210,207,203,199,169,165,159,152,148,144,140,137"
Benchmark.bm do |x|
x.report('split') { 1_000_000.times { string.split(',').map(&:to_i) } }
x.report('scan') { 1_000_000.times { string.scan(/\d+/).map(&:to_i) } }
end
的产率:
user system total real
split 3.550000 0.010000 3.560000 ( 3.580334)
scan 7.350000 0.020000 7.370000 ( 7.402508)