我正在尝试将由Ruby Strings组成的数组数组转换为由字符串和浮点数组成的数组数组。
这是我的尝试:
array = [["My", "2"], ["Cute"], ["Dog", "4"]]
array.collect! do |x|
x.each do |y|
if y.gsub!(/\d+/){|s|s.to_f}
end
end
end
=> [["My", "2.0"], ["Cute"], ["Dog", "4.0"]]
我正在寻找这个而不是回归[["My", 2.0], ["Cute"], ["Dog", 4.0]]
我做错了什么?
答案 0 :(得分:0)
你做错了是你使用了gsub!
。这需要一个字符串并更改字符串。无论你做什么,它都不会把它变成其他东西(即使你把它转换成中间的浮点数)。
实现目标的简单方法是:
[["My", "2"], ["Cute"], ["Dog", "4"]].map{|s1, s2| [s1, *(s2.to_f if s2)]}
如果您不想创建元素数组,而是替换其内容,则:
[["My", "2"], ["Cute"], ["Dog", "4"]].each{|a| a[1] = a[1].to_f if a[1]}
如果数字字符串出现在随机位置,则:
[["My", "2"], ["Cute"], ["Dog", "4"]]
.each{|a| a.each.with_index{|e, i| a[i] = a[i].to_f if a[i] and a[i] =~ /\d+/}}