J'ai un tableau:
array = ["10", "20", "50", "99"]
Et je veux 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 retiendra pas les guillemets autour des valeurs ni des espaces après.
Pour conserver les guillemets et les espaces: array.map{|item| %Q{"#{item}"}}.join(', ')
Ceci imprimera "\"10\", \"20\", \"50\", \"99\""
. Les guillemets sont nécessaires en supposant que la question appelle en fait une seule chaîne.
Documentation sur le %Q
: littéraux de chaîne .
Vous pourriez utiliser inspect
comme suggéré dans une autre réponse , je dirais que c'est une préférence personnelle. Je ne voudrais pas, allez regarder le code source pour cela et choisissez vous-même.
Côté utile: array.to_sentence
vous donnera une sortie de style "1, 2, 3 et 4", ce qui peut être agréable!
Ici:
array.map {|str| "\"#{str}\""}.join(',')
Plusieurs réponses ont offert des solutions en utilisant #map
, #inspect
, #join
. Tous ne parviennent pas à obtenir certains détails du codage CSV correct pour les cas Edge 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 stdlib CSV puis lancez la vôtre.
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
Les solutions map.join sont suffisantes si cet encodage ne doit pas s’occuper des délimiteurs incorporés, ou est destiné à une représentation interne 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), comme une représentation généralement comprise.
La solution la plus simple consiste à utiliser la méthode ".to_sentence" intégrée.
Alors
["fred", "john", "amy"]. to_sentence génère "fred, john et amy"
C'est une solution légèrement différente, particulièrement utile si vous devez convertir un tableau avec des chaînes entre guillemets doubles en une liste entre guillemets simples (pour les requêtes SQL par exemple):
"'#{["John Oliver", "Sam Tom"].join("','")}'"
à
'John Oliver', 'Sam Tom'
Attribution: https://alok-anand-ror.blogspot.com/2014/04/Ruby-join-array-elements-with-single.html