Konwersja tablicy Ruby na ciąg znaków

178

Mam tablicę rubinową ['12','34','35','231'].

Chcę przekonwertować go na ciąg znaków jak '12','34','35','231'.

Jak mogę to zrobić?

Sachin R.
źródło

Odpowiedzi:

315

Dołączę do zabawy z:

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

EDYTOWAĆ:

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

Trochę interpolacji ciągów w celu dodania pierwszego i ostatniego pojedynczego cudzysłowu: P

skorodowane
źródło
1
Daje to wynik „12,34,35,231”. W wyniku brakuje pojedynczych cudzysłowów.
Bernard,
1
Dobra, dodałem interpolację ciągów znaków, aby dodać pierwszy i ostatni pojedynczy cytat: P
skorodowany
jak to przywrócić?
zx1986,
co masz na myśli revert @ zx1986
skorodowany
@corroded Przepraszamy, mam to. JSON.parse("[12, 39, 100]")zwróci tablicę.
zx1986
43
> a = ['12','34','35','231']
> a.map { |i| "'" + i.to_s + "'" }.join(",")
=> "'12','34','35','231'"
Shadwell
źródło
6
Być może "'#{i}'"zamiast tego.
Mladen Jablanović
nie sądzę, że mapa jest potrzebna. dołącz powinno załatwić sprawę. patrz poniżej
djburdick,
31

wypróbuj ten kod ['12','34','35','231']*","

da wynik „12,34,35,231”

Mam nadzieję, że to wynik, daj mi znać

ranjith kumar vengala
źródło
Myślę, że PO również musi mieć jeden cytat.
Laf,
11
array.map{ |i|  %Q('#{i}') }.join(',')
dziki kraj
źródło
1
Cytując Mladena: „Być może "'#{i}'"zamiast tego [użyj] ”.
Andrew Grimm
9
string_arr.map(&:inspect).join(',') # or other separator
avihil
źródło
Nie daje to prawidłowego wyniku - wartości muszą być zawinięte w pojedyncze cudzysłowy. Gdyby to był pożądany wynik, lepszym rozwiązaniem byłoby string_arr.join („,”).
Sean Cameron,
Sean, mylisz się. Czy uruchomiłeś wyrażenie przynajmniej raz?
avihil
Nadal jest źle. Powoduje to podwójne cudzysłowy wokół pozycji tablicy, a nie pojedyncze cudzysłowy. Dodatkowo opiera się na założeniu, że format „inspect ()” drukuje dane, co czyni go kruchym.
Andrew Hodgkinson,
[„1”, „2”, „3”]. Mapa {| o | "\ '# {o} \'"} .join (',')
aviil
7

Uważam ten sposób za czytelny i rubinowy:

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

p  ['12','34','35','231'].map(&add_quotes).join(',') => "'12','34','35','231'"
Hirolau
źródło
5
> puts "'"+['12','34','35','231']*"','"+"'"
'12','34','35','231'

> puts ['12','34','35','231'].inspect[1...-1].gsub('"',"'")
'12', '34', '35', '231'
John La Rooy
źródło
4

I jeszcze jedna odmiana

a = ['12','34','35','231']
a.to_s.gsub(/\"/, '\'').gsub(/[\[\]]/, '')
Bernard
źródło
3
irb(main)> varA
=> {0=>["12", "34", "35", "231"]}
irb(main)> varA = Hash[*ex.collect{|a,b| [a,b.join(",")]}.flatten]
...
NinjaCat
źródło
3
irb(main):027:0> puts ['12','34','35','231'].inspect.to_s[1..-2].gsub('"', "'")
'12', '34', '35', '231'
=> nil
ngoozeff
źródło
2

Możesz zastosować funkcjonalne podejście do programowania, przekształcając dane:

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

Peter Toth - Toma
źródło
-5

array.inspect.inspect.gsub(/\[|\]/, "") mógł załatwić sprawę

chrześcijanin
źródło