Search code examples
rubyarraysstringversionstring-interpolation

ruby 1.9 how to convert array to string without brackets


My question is about how to convert array elements to string in ruby 1.9 without getting the brackets and quotation marks. I've got an array (DB extract), from which I want to use to create a periodic report.

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

In ruby 1.8 I had the following line

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

Which produced the (wanted) output

In the first quarter we sold 2 Apple(s).

The same two lines in ruby 1.9 produce (not wanted)

In the first quarter we sold ["2"] ["Apple"] (s).

After reading in the documentation Ruby 1.9.3 doc#Array#slice I thought I could produce code like

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

which returns a runtime error

/home/test/example.rb:450:in `+': can't convert Array into String (TypeError)

My current solution is to remove brackets and quotation marks with a temporary string, like

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

which in general works.

However, what would be a more elegant "ruby" way how to do that?


Solution

  • Use interpolation instead of concatenation:

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

    It's more idiomatic, more efficient, requires less typing and automatically calls to_s for you.