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>

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(" ")

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

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>
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.