Comment convertir un tableau de chaînes en une chaîne séparée par des virgules?

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.