如何将字符串数组的每个元素转换为受特定条件限制的数字?

时间:2017-02-08 18:47:03

标签: arrays ruby string integer

我正在使用Ruby 2.4。我有一系列字符串 - 他们可以采取任何形式。我想对它们应用“to_i”函数,但前提是字符串只包含数字。我试过这个

data.map(&:to_i)

但这会把像[“6M”]这样的东西转换为[“6”],我不想要它(我希望它是[“0”],因为那里有“M”)。然后我试了

 data.select{|string| string.to_i.to_s == string ? string.to_i : -2 }

但这也没有做任何事。如何在特定条件下将字符串转换为整数?

2 个答案:

答案 0 :(得分:1)

你离解决方案只有一步之遥。一个人仍然应该使用map,而不是select

%w|6M 6 M|.map { |s| (i = s.to_i).to_s == s ? i : 0 }
#⇒ [0, 6, 0]

另一种方法是使用Regexp

%w|6M 6 M|.map { |s| s =~ /\A-?\d+\z/ ? s.to_i : 0 }
#⇒ [0, 6, 0]

答案 1 :(得分:0)

我认为,可能的解决方案之一是:

a = %w|6m 6 m|
a.map { |e| Integer(e) rescue 0 }
#=> [0, 6, 0]