要转换为混合数组的字符串数组

时间:2013-02-12 08:40:40

标签: ruby arrays string

我正在尝试将由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]]我做错了什么?

1 个答案:

答案 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+/}}