J’ai un tableau:
array = ["10", "20", "50", "99"]
et que vous voulez le convertir en une simple liste de chaînes séparées par des virgules comme ceci:
"10", "20", "50", "99"
["10", "20", "50","99"].map(&:inspect).join(', ') # => '"10", "20", "50", "99"'
array.join(',')
fera presque ce que vous voulez; il ne conservera pas les guillemets autour des valeurs ni des espaces après.
Pour conserver les guillemets et les espaces: array.map{|item| %Q{"#{item}"}}.join(', ')
array.map{|item| %Q{"#{item}"}}.join(', ')
Ceci affichera "\"10\", \"20\", \"50\", \"99\""
. Les citations échappées sont nécessaires en supposant que la question appelle en fait une seule chaîne.
Documentation sur les littéraux %Q
: ssortingng .
Vous pouvez utiliser inspect
comme suggéré dans une autre réponse , je dirais que c’est la préférence personnelle. Je ne voudrais pas aller voir le code source pour cela et choisir pour vous-même.
array.to_sentence
utile: array.to_sentence
vous donnera une sortie de style “1, 2, 3 et 4”, ce qui peut être sympa!
Ici:
array.map {|str| "\"#{str}\""}.join(',')
Plusieurs réponses ont proposé des solutions en utilisant #map
, #inspect
, #join
. Tous ne parviennent pas à obtenir certains détails du codage CSV correct pour les cas de bord impliquant des virgules incorporées et / ou des délimiteurs de chaîne dans les éléments.
C’est probablement une meilleure idée d’utiliser la classe CSD de stdlib pour lancer la vôtre.
irb> require 'csv' => true irb> a = [10,'1,234','JR "Bob" Dobbs',3.14159] => [10, "1,234", "JR \"Bob\" Dobbs", 3.14159] irb> puts a.to_csv 10,"1,234","JR ""Bob"" Dobbs",3.14159
Les solutions map.join sont suffisantes si ce codage n’a pas besoin de se soucier des délimiteurs incorporés, ou est destiné à certaines représentations internes uniquement, mais échouera si des données sont échangées avec d’autres programmes qui attendent des valeurs séparées par des virgules (CSV). une représentation généralement comprise.