我正在使用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 }
但这也没有做任何事。如何在特定条件下将字符串转换为整数?
答案 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]