У меня есть массив:
array = ["10", "20", "50", "99"]
И я хочу преобразовать его в простой список строк через запятую, например так:
"10", "20", "50", "99"
У меня есть массив:
array = ["10", "20", "50", "99"]
И я хочу преобразовать его в простой список строк через запятую, например так:
"10", "20", "50", "99"
["10", "20", "50","99"].map(&:inspect).join(', ') # => '"10", "20", "50", "99"'
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", что может быть приятно!
Здесь:
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
Решения map.join достаточны, если это кодирование не нужно заботиться о встроенных разделителях или предназначено только для некоторого внутреннего представления, но они будут терпеть неудачу, если генерировать данные для обмена с другими программами, которые ожидают значения, разделенные запятыми ( CSV) как общепринятое представление.
Самое простое решение - использовать встроенный метод ".to_sentence".
Так
["fred", "john", "amy"]. to_sentence выводит "fred, john и amy"
Это несколько альтернативное решение, особенно удобное, если вам нужно преобразовать массив со строками в двойных кавычках в один список в кавычках (например, для запросов 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