ruby 1.9 как преобразовать массив в строку без скобок
мой вопрос о том, как преобразовать элементы массива в строку в Ruby 1.9 без скобок и кавычек. У меня есть массив (DB extract), из которого я хочу использовать для создания периодического отчета.
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
, который произвел (хотел) выход
в первом квартале мы продали 2 яблока(ы).
те же две строки в ruby 1.9 производят (не разыскивается)
в первом квартале мы продали ["2"] ["Apple"] (ы).
после прочтения документации Ruby 1.9.3 doc#Array#slice Я думал, что смогу создать код типа
reportStr = "In the first quarter we sold " + myArray[3] + " " + myArray[0] + "(s)."
puts reportStr
который возвращает ошибку выполнения
/главная/тест/пример.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
, который в целом работает.
однако, что было бы более элегантным "рубиновым" способом, как это сделать?
4 ответов
используйте интерполяцию вместо конкатенации:
reportStr = "In the first quarter we sold #{myArray[3]} #{myArray[0]}(s)."
это более идиоматично, более эффективно, требует меньше ввода и автоматически вызывает to_s
для вас.
можно использовать .join
метод.
например:
my_array = ["Apple", "Pear", "Banana"]
my_array.join(', ') # returns string separating array elements with arg to `join`
=> Apple, Pear, Banana
и если вам нужно сделать это для более чем одного плода лучший способ преобразовать массив и используйте каждое утверждение.
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.
вы можете думать об этом как arrayToString()
array = array * " "
Е. Г.,
myArray = ["One.","_1_?! Really?!","Yes!"]
=>
"One.","_1_?! Really?!","Yes!"
myArray = myArray * " "
=>
"One. _1_?! Really?! Yes."