14

私の質問は、括弧や引用符を取得せずに、Ruby 1.9 で配列要素を文字列に変換する方法についてです。定期レポートを作成するために使用する配列 (DB 抽出) があります。

myArray = ["Apple", "Pear", "Banana", "2", "15", "12"]

Ruby 1.8では、次の行がありました

reportStr = "In the first quarter we sold " + myArray[3].to_s + " " + myArray[0].to_s + "(s)."
puts reportStr

(必要な)出力を生成したもの

第 1 四半期に、Apple を 2 個販売しました。

ruby 1.9 の同じ 2 行が生成します (望ましくない)

第 1 四半期に ["2"] ["Apple"] (s) を販売しました。

ドキュメントRuby 1.9.3 doc#Array#sliceを読んだ後、 次の ようなコードを生成できると思いました

reportStr = "In the first quarter we sold " + myArray[3] + " " + myArray[0] + "(s)."
puts reportStr

実行時エラーを返す

/home/test/example.rb:450:`+': 配列を文字列に変換できません (TypeError)

私の現在の解決策は、次のような一時的な文字列で括弧と引用符を削除することです

tempStr0 = myArray[0].to_s
myLength = tempStr0.length
tempStr0 = tempStr0[2..myLength-3]
tempStr3 = myArray[3].to_s
myLength = tempStr3.length
tempStr3 = tempStr3[2..myLength-3]
reportStr = "In the first quarter we sold " + tempStr3 + " " + tempStr0 + "(s)."
puts reportStr

これは一般的に機能します。

しかし、それを行うためのよりエレガントな「ルビー」の方法は何でしょうか?

4

4 に答える 4

39

メソッドを使用できます.join

例えば:

my_array = ["Apple", "Pear", "Banana"]

my_array.join(', ') # returns string separating array elements with arg to `join`

=> Apple, Pear, Banana
于 2014-05-29T18:49:30.703 に答える
2

連結の代わりに補間を使う:

reportStr = "In the first quarter we sold #{myArray[3]} #{myArray[0]}(s)."

それはより慣用的で、より効率的で、タイピングが少なくて済み、自動的にあなたを呼び出しto_sます。

于 2013-10-23T07:14:42.067 に答える
1

複数の果物に対してこれを行う必要がある場合は、配列を変換して each ステートメントを使用するのが最善の方法です。

myArray = ["Apple", "Pear", "Banana", "2", "1", "12"]
num_of_products = 3

tranformed = myArray.each_slice(num_of_products).to_a.transpose
p tranformed #=> [["Apple", "2"], ["Pear", "1"], ["Banana", "12"]]

tranformed.each do |fruit, amount|
  puts "In the first quarter we sold #{amount} #{fruit}#{amount=='1' ? '':'s'}."
end 

#=>
#In the first quarter we sold 2 Apples.
#In the first quarter we sold 1 Pear.
#In the first quarter we sold 12 Bananas.
于 2013-10-23T08:19:58.583 に答える