从Ruby中的字符串中删除逗号然后转换为整数

时间:2015-06-09 22:08:26

标签: ruby

这里奇怪的观察:

2.0.0-p353 :016 > "1,056".gsub!(/,/,'').to_i
 => 1056 
2.0.0-p353 :017 > "955".gsub!(/,/,'').to_i
 => 0 

有没有办法在不打破不在其中,字段的数字的情况下始终如一地执行此操作?

2 个答案:

答案 0 :(得分:1)

我认为要求是:

  • 接收者是一个由变量保存的字符串(因为如果它是一个字符串文字,就没有必要改变接收者);
  • 逗号(如果存在的话)将从接收者中删除(即,接收者将被突变);和
  • 接收器将转换为整数并返回整数。

一种方法如下:

str = "955"
str.tap { |s| s.delete!(',') }.to_i
  #=> 955
str
  #=> "955" 

str = "1,955"
str.tap { |s| s.delete!(',') }.to_i
  #=> 1955
str
  #=> "1955"

str = "1,955,658"
str.tap { |s| s.delete!(',') }.to_i
  #=> 1955658 
str
  #=> "1955658" 

答案 1 :(得分:1)

叹息......基准人......

require 'fruity'

NUM = '1,234,567,890'

compare do 
  _delete { NUM.delete(',').to_i }
  _gsub { NUM.gsub(',', '').to_i }
  _scan {NUM.scan(/\d+/).join.to_i }
  _split { NUM.split(',').join.to_i }
end
# >> Running each test 4096 times. Test will take about 1 second.
# >> _delete is faster than _split by 2.4x ± 0.1
# >> _split is faster than _gsub by 10.000000000000009% ± 1.0%
# >> _gsub is faster than _scan by 2.2x ± 0.1

换句话说,使用delete(',')删除分隔逗号,然后将结果字符串转换为整数。不要将其拆分为数组,然后重新加入,不要将其扫描到数组中,不要让gsub','转换为正则表达式,然后将所有匹配项替换为{{1 }}