Ruby kombiniert ein Array zu einer Zeichenfolge


163

Gibt es in Ruby eine Möglichkeit, alle Array-Elemente zu einer Zeichenfolge zu kombinieren?

Beispielarray:

@arr = ['<p>Hello World</p>', '<p>This is a test</p>']

Beispielausgabe:

<p>Hello World</p><p>This is a test</p>

6
Die Dokumentation ist dein Freund! Es wird Ihnen erheblich helfen, die Methoden von Array, String, Hash usw. zu studieren
Mark Thomas

Antworten:


303

Verwenden Sie die Array#joinMethode (das Argument für joinist, was zwischen den Zeichenfolgen eingefügt werden soll - in diesem Fall ein Leerzeichen):

@arr.join(" ")

1
Was wäre, wenn Sie sich Ziffern anschließen würden? [1,2,3] => 123?
Stevenspiel

3
@ mr.musicman joinarbeitet mit Aufzählungen von allem, was darauf reagiert to_s, einschließlich Ganzzahlen, aber das Ergebnis ist immer eine Zeichenfolge. Wenn Sie ein ganzzahliges Ergebnis wünschen, können Sie es to_ifür das Ergebnis verwenden.
sepp2k

1
Wenn Sie eine mehrzeilige Zeichenfolge ursprünglich mit aufgelöst haben String#lines, können Sie sie mit my_string.join('')(beachten Sie das leere Zeichenfolgenargument) wieder zusammenbinden.
Frank Koehl

Um zu dem hinzuzufügen, was @ sepp2k gesagt hat: joinversucht es #to_strzuerst und #to_szweitens.
Greg Navis

19

Obwohl etwas kryptischer als join, können Sie das Array auch mit einer Zeichenfolge multiplizieren.

@arr * " "

1
Gibt es neben der Kryptizität einen möglichen Fehler bei der Verwendung dieses Tricks?
Marcio

4
@marcioAlmada Kein Fehler, nur minimaler Aufwand. In array.c sucht Ruby zunächst nach einem Zeichenfolgentyp und ruft dann die Join-Methode auf. Außerdem: mit Show-Source-Steinen hebeln! Versuchen Sie es selbst: $ Array.instance_methods.*($ ist eine Abkürzung für Show-Quelle)
okket

1

Hier ist meine Lösung:

@arr = ['<p>Hello World</p>', '<p>This is a test</p>']
@arr.reduce(:+)
=> <p>Hello World</p><p>This is a test</p>
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.