web-dev-qa-db-ja.com

ruby 1.9配列を角括弧なしの文字列に変換する方法

私の質問は、配列要素を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四半期に、アップルを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:in `+ ':配列を文字列に変換できません(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

一般的に動作します。

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

13
Chris

連結の代わりに補間を使用します。

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

より慣用的で効率的で、入力が少なくて済み、自動的にto_sが呼び出されます。

2
Agis

.join メソッド。

例えば:

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

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

=> Apple, Pear, Banana
32
Santosh Sindham

そして、これを複数の果物に対して行う必要がある場合、最善の方法は、配列を変換し、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.
1
hirolau

これはarrayToString()と考えることができます

array = array * " "

例えば。、

myArray = ["One.","_1_?! Really?!","Yes!"]

=>"One.","_1_?! Really?!","Yes!"

myArray = myArray * " "

=>"One. _1_?! Really?! Yes."

1