Как преобразовать массив строк в строку через запятую?


у меня есть массив:

array = ["10", "20", "50", "99"]

и хотите преобразовать его в простой список строк, разделенных запятыми, как это:

"10", "20", "50", "99"
4 60

4 ответа:

["10", "20", "50","99"].map(&:inspect).join(', ') # => '"10", "20", "50", "99"'

array.join(',') будет почти делать то, что вы хотите; он не будет сохранять кавычки вокруг значений, ни пробелы после.

для сохранения кавычек и пробелов:array.map{|item| %Q{"#{item}"}}.join(', ') Это будет печатать "\"10\", \"20\", \"50\", \"99\"". Экранированные кавычки необходимы, если вопрос действительно вызывает одну строку.

документация %Q:строковые литералы.

вы может использовать inspect как предложил в другом ответе, я бы сказал это личные предпочтения. Я бы не стал, иди посмотри на исходный код для этого и выбирайте сами.

полезно в сторону:array.to_sentence даст вам" 1, 2, 3 и 4 " стиль вывода, который может быть приятно!

здесь:

array.map {|str| "\"#{str}\""}.join(',')

несколько ответов предложили решения с использованием #map,#inspect,#join. Все они не могут получить определенные сведения о кодировке CSV, правильные для крайних случаев, включающих встроенные запятые и/или строковые разделители в элементах.

Это, наверное, лучшая идея, чтобы использовать stdlib класс CSV затем свернуть свой собственный.

irb> require 'csv'
=> true
irb> a = [10,'1,234','J.R. "Bob" Dobbs',3.14159]
=> [10, "1,234", "J.R. \"Bob\" Dobbs", 3.14159]
irb> puts a.to_csv
10,"1,234","J.R. ""Bob"" Dobbs",3.14159

карте.решения для объединения достаточны, если эта кодировка не должна заботиться о встроенных разделителях или предназначена для некоторых только внутреннее представление, но они потерпят неудачу, если будут генерировать данные для обмена с другими программами, которые ожидают значения, разделенные запятыми (CSV), как обычно понимаемое представление.