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 に答える