Conversão de matriz Ruby para string


178

Eu tenho uma matriz de rubi como ['12','34','35','231'].

Eu quero convertê-lo para uma string como '12','34','35','231'.

Como eu posso fazer isso?

Respostas:


315

Vou me divertir com:

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

EDITAR:

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

Alguma interpolação de string para adicionar a primeira e a última citação simples: P


1
Isso resulta em "12,34,35,231". Faltam aspas simples no resultado.
Bernard

1
Okay adicionou alguma interpolação de string para adicionar a primeira e a última aspas simples: P
corroída de

como reverter isso?
precisa saber é

o que você quer dizer reverter @ zx1986
corroído em

@ codificado Desculpe, entendi. JSON.parse("[12, 39, 100]")retornará uma matriz.
zx1986

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

6
Talvez usando em "'#{i}'"vez disso.
Mladen Jablanović 18/08/10

não pense que o mapa é necessário. join deve fazer o truque. veja abaixo
djburdick

31

tente este código ['12','34','35','231']*","

lhe dará o resultado "12,34,35,231"

Espero que este seja o resultado que você, me avise


Acho que o OP também precisa ter aspas simples.
Laf


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

Isso não produz a saída correta - os valores precisam ser agrupados em aspas simples. Se este foi o resultado desejado, string_arr.join (",") seria a melhor opção.
21413 Sean Cameron

Sean, você está errado. Você executou a expressão, pelo menos uma vez?
avihil

Ainda está errado. Isso resulta em aspas duplas nas entradas da matriz, não em aspas simples. Além disso, conta com uma suposição sobre o formato que "inspeciona ()" imprime dados, o que os torna frágeis.
Andrew Hodgkinson

['1', '2', '3']. Mapa {| o | "\ '# {o} \'"} .join (',')
15/01/14

7

Acho assim legível e rubyish:

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

E ainda outra variação

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

Você pode usar alguma abordagem de programação funcional, transformando dados:

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


-5

array.inspect.inspect.gsub(/\[|\]/, "") poderia fazer o truque

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.