1

我正在尝试将由 Ruby 字符串组成的数组数组转换为由字符串和浮点数组成的数组数组。

这是我的尝试:

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]]我做错了什么?

4

1 回答 1

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+/}}
于 2013-02-12T08:45:42.867 回答