如何在Ruby中将String转换为数组

mai*_*mer -1 ruby arrays string

在ruby中,我有一个带字符串值的数组:

my_array=["210,207,203,199,169,165,159,152,148,144,140,137"]
Run Code Online (Sandbox Code Playgroud)

如何将其转换为正常数组,如下所示:

my_array=[210,207,203,199,169,165,159,152,148,144,140,137]
Run Code Online (Sandbox Code Playgroud)

注意:所有元素都是非负值.
我知道我可以通过手动修剪双引号来做到这一点,但我想知道是否有更优雅的方式来实现它?

dav*_*rac 10

我认为这应该有效:

my_array = my_array[0].split(',').map(&:to_i)
Run Code Online (Sandbox Code Playgroud)


awe*_*ndt 7

扩展davidrac的答案,您也可以使用String#scan而不是String#split:

my_array = my_array[0].scan(/\d+/).map(&:to_i)
Run Code Online (Sandbox Code Playgroud)

编辑

这个明显的基准显示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
Run Code Online (Sandbox Code Playgroud)

收益率:

           user     system      total        real
split  3.550000   0.010000   3.560000 (  3.580334)
scan   7.350000   0.020000   7.370000 (  7.402508)
Run Code Online (Sandbox Code Playgroud)