Konvertierung von Ruby-Arrays in Zeichenfolgen

178

Ich habe ein Ruby-Array wie ['12','34','35','231'].

Ich möchte es in eine Zeichenfolge wie konvertieren '12','34','35','231'.

Wie kann ich das machen?

Sachin R.
quelle

Antworten:

314

Ich werde mich dem Spaß anschließen mit:

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

BEARBEITEN:

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

Einige String-Interpolation, um das erste und letzte einfache Anführungszeichen hinzuzufügen: P.

korrodiert
quelle
1
Das ergibt "12,34,35,231". Es fehlen die einfachen Anführungszeichen im Ergebnis.
Bernard
1
Okay, einige String-Interpolation hinzugefügt, um die ersten und letzten einfachen Anführungszeichen hinzuzufügen: P
korrodiert
Wie kann man das rückgängig machen?
zx1986
Was meinst du mit revert @ zx1986
korrodiert am
@corroded Sorry, ich habe es verstanden. JSON.parse("[12, 39, 100]")gibt ein Array zurück.
zx1986
43
> a = ['12','34','35','231']
> a.map { |i| "'" + i.to_s + "'" }.join(",")
=> "'12','34','35','231'"
Shadwell
quelle
6
Vielleicht "'#{i}'"stattdessen verwenden.
Mladen Jablanović
Ich glaube nicht, dass eine Karte benötigt wird. Join sollte den Trick machen. siehe unten
djburdick
31

Versuchen Sie diesen Code ['12','34','35','231']*","

gibt Ihnen das Ergebnis "12,34,35,231"

Ich hoffe das ist das Ergebnis, lass es mich wissen

Ranjith Kumar Vengala
quelle
Ich denke, das OP muss auch ein einfaches Anführungszeichen haben.
Laf
11
array.map{ |i|  %Q('#{i}') }.join(',')
wildes Land
quelle
1
Um Mladen zu zitieren: "Vielleicht "'#{i}'"stattdessen [verwenden] ."
Andrew Grimm
9
string_arr.map(&:inspect).join(',') # or other separator
avihil
quelle
Dies führt nicht zu der richtigen Ausgabe - die Werte müssen in einfache Anführungszeichen gesetzt werden. Wenn dies die gewünschte Ausgabe wäre, wäre string_arr.join (",") die bessere Option.
Sean Cameron
Sean, du liegst falsch. Hast du den Ausdruck mindestens einmal ausgeführt?
Avihil
Es ist immer noch falsch. Dies führt zu doppelten Anführungszeichen um die Array-Einträge, nicht zu einfachen Anführungszeichen. Außerdem basiert es auf einer Annahme über das Format, in dem "inspect ()" Daten druckt, was sie zerbrechlich macht.
Andrew Hodgkinson
['1', '2', '3']. Map {| o | "\ '# {o} \'"} .join (',')
am
7

Ich finde diesen Weg lesbar und rubinrot:

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

p  ['12','34','35','231'].map(&add_quotes).join(',') => "'12','34','35','231'"
Hirolau
quelle
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
quelle
4

Und noch eine Variation

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

Sie können einen funktionalen Programmieransatz verwenden, um Daten zu transformieren:

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

Peter Toth - Toma
quelle
-5

array.inspect.inspect.gsub(/\[|\]/, "") könnte den Trick machen

Christian
quelle