web-dev-qa-db-fra.com

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 je veux le convertir en une simple liste de chaînes séparées par des virgules, comme ceci:

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

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!

113
Matt

Ici:

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

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.

10
dbenhur

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"

2
Michael Taylor

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

0
Linearza