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.