Conversion de tableau Ruby en chaîne


183

J'ai un tableau de rubis comme ['12','34','35','231'].

Je veux le convertir en une chaîne comme '12','34','35','231'.

Comment puis je faire ça?

Réponses:


322

Je vais rejoindre le plaisir avec:

['12','34','35','231'].join(', ')

ÉDITER:

"'#{['12','34','35','231'].join("', '")}'"

Une interpolation de chaîne pour ajouter le premier et le dernier guillemet simple: P


1
Cela donne "12,34,35,231". Il manque les guillemets simples dans le résultat.
Bernard

1
OK ajouté une interpolation de chaîne pour ajouter les premier et dernier guillemets simples: P
corrodé

comment inverser cela?
zx1986

que voulez-vous dire revert @ zx1986
corrodé le

@corroded Désolé, je l'ai compris. JSON.parse("[12, 39, 100]")renverra un tableau.
zx1986

43
> a = ['12','34','35','231']
> a.map { |i| "'" + i.to_s + "'" }.join(",")
=> "'12','34','35','231'"

7
Peut-être en utilisant à la "'#{i}'"place.
Mladen Jablanović

ne pensez pas que la carte est nécessaire. join devrait faire l'affaire. voir ci-dessous
djburdick

32

essayez ce code ['12','34','35','231']*","

vous donnera le résultat "12,34,35,231"

J'espère que c'est le résultat que vous, faites le moi savoir


Je pense que le PO doit également avoir une citation unique.
Laf


9
string_arr.map(&:inspect).join(',') # or other separator

Cela ne produit pas la sortie correcte - les valeurs doivent être entourées de guillemets simples. Si c'était la sortie souhaitée, string_arr.join (",") serait la meilleure option.
Sean Cameron

Sean, tu as tort. Avez-vous exécuté l'expression, au moins une fois?
avihil

C'est toujours faux. Il en résulte des guillemets doubles autour des entrées du tableau, pas des guillemets simples. De plus, il repose sur une hypothèse sur le format que «inspect ()» imprime les données, ce qui les rend fragiles.
Andrew Hodgkinson

['1', '2', '3']. Map {| o | "\ '# {o} \'"} .join (',')
avihil

7

Je trouve cela lisible et rubis:

add_quotes =- > x{"'#{x}'"}

p  ['12','34','35','231'].map(&add_quotes).join(',') => "'12','34','35','231'"

5
> puts "'"+['12','34','35','231']*"','"+"'"
'12','34','35','231'

> puts ['12','34','35','231'].inspect[1...-1].gsub('"',"'")
'12', '34', '35', '231'

4

Et encore une autre variation

a = ['12','34','35','231']
a.to_s.gsub(/\"/, '\'').gsub(/[\[\]]/, '')

3
irb(main)> varA
=> {0=>["12", "34", "35", "231"]}
irb(main)> varA = Hash[*ex.collect{|a,b| [a,b.join(",")]}.flatten]
...

3
irb(main):027:0> puts ['12','34','35','231'].inspect.to_s[1..-2].gsub('"', "'")
'12', '34', '35', '231'
=> nil

2

Vous pouvez utiliser une approche de programmation fonctionnelle, en transformant les données:

['12','34','35','231'].map{|i| "'#{i}'"}.join(",")


-6

array.inspect.inspect.gsub(/\[|\]/, "") pourrait faire l'affaire

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.