Ruby łączy tablicę w jeden ciąg

163

Czy w Rubim można połączyć wszystkie elementy tablicy w jeden ciąg?

Przykładowa tablica:

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

Przykładowe dane wyjściowe:

<p>Hello World</p><p>This is a test</p>
dennismonsewicz
źródło
6
Dokumentacja jest Twoim przyjacielem! Pomoże ci to znacznie przestudiować metody Array, String, Hash itp.
Mark Thomas,

Odpowiedzi:

303

Użyj Array#joinmetody (argumentem do joinjest to, co należy wstawić między ciągami - w tym przypadku spacja):

@arr.join(" ")
sepp2k
źródło
1
co by było, gdybyś łączył cyfry? [1,2,3] => 123?
stevenspiel
3
@ mr.musicman joindziała z wyliczeniami wszystkiego, na co odpowiada to_s, w tym liczb całkowitych, ale wynikiem zawsze będzie ciąg. Jeśli chcesz uzyskać wynik w postaci liczby całkowitej, możesz użyć to_ina wyniku.
wrzesień
1
Jeśli początkowo podzieliłeś wielowierszowy ciąg za pomocą String#lines, możesz rozsądnie powiązać go z powrotem za pomocą my_string.join('')(zwróć uwagę na pusty argument ciągu).
Frank Koehl
Aby dodać do tego, co powiedział @ sepp2k: joinpróbuje #to_strpierwsza i #to_sdruga.
Greg Navis
19

Chociaż jest to nieco bardziej tajemnicze niż join, możesz również pomnożyć tablicę przez ciąg.

@arr * " "
David Harkness
źródło
1
poza tym, że jest tajemniczy, czy jest jakaś możliwa wada podczas używania tej sztuczki?
marcio
4
@marcioAlmada Żadnej wady, tylko minimalne obciążenie. W array.c pierwszą rzeczą, jaką Ruby robi, jest sprawdzenie typu łańcucha, a następnie wywołanie metody join. A także: podważaj skały z pokazów! Spróbuj sam: $ Array.instance_methods.*($ to skrót od źródła show-source)
okket
1

Oto moje rozwiązanie:

@arr = ['<p>Hello World</p>', '<p>This is a test</p>']
@arr.reduce(:+)
=> <p>Hello World</p><p>This is a test</p>
von spotz
źródło