Подтвердить что ты не робот

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

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

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

И я хочу преобразовать его в простой список строк через запятую, например так:

"10", "20", "50", "99"
4b9b3361

Ответ 1

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

Ответ 2

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

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

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

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

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

Ответ 3

Здесь:

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

Ответ 4

Несколько ответов предложили решения с использованием #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

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

Ответ 5

Самое простое решение - использовать встроенный метод ".to_sentence".

Так

["fred", "john", "amy"]. to_sentence выводит "fred, john и amy"

Ответ 6

Это несколько альтернативное решение, особенно удобное, если вам нужно преобразовать массив со строками в двойных кавычках в один список в кавычках (например, для запросов SQL):

"'#{["John Oliver", "Sam Tom"].join("','")}'"

в

'John Oliver', 'Sam Tom'

Атрибуция: https://alok-anand-ror.blogspot.com/2014/04/ruby-join-array-elements-with-single.html