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?

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.


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'"

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


Ich denke, das OP muss auch ein einfaches Anführungszeichen haben.
Laf


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

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'"

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

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

4

Und noch eine 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

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

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


-5

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.