Bir diziyi tek bir dizede birleştiren Ruby


163

Ruby'de tüm dizi öğelerini tek bir dizede birleştirmenin bir yolu var mı?

Örnek Dizi:

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

Örnek Çıktı:

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

6
Dokümantasyon senin arkadaşın! Array, String, Hash, vb. Yöntemlerini incelemenizde size yardımcı olacaktır.
Mark Thomas

Yanıtlar:


303

Array#joinYöntemi kullanın ( joindizeler arasına ne ekleneceğidir - bu durumda boşluk):

@arr.join(" ")

1
rakamlara katılıyorsanız ne olur? [1,2,3] => 123?
stevenspiel

3
@ mr.musicman , tamsayılar da dahil olmak üzere joinyanıt veren her şeyin numaralandırmasıyla çalışır to_s, ancak sonuç her zaman bir dize olacaktır. Tamsayı bir sonuç istiyorsanız to_i, sonuçta kullanabilirsiniz .
sepp2k

1
Başlangıçta kullanarak çok satırlı bir dize kırdıysanız String#lines, kullanarak my_string.join('')boş bir şekilde birbirine bağlayabilirsiniz (boş dize bağımsız değişkenine dikkat edin).
Frank Koehl

@ Sepp2k'nin söylediklerine eklemek için: birinci ve ikinci joindenemeleri yapar . #to_str#to_s
Greg Navis

19

Biraz daha şifreli olsa joinda, diziyi bir dizeyle çarpabilirsiniz.

@arr * " "

1
şifreli olmanın yanı sıra, bu hileyi kullanırken herhangi bir olası kusur var mı?
marcio

4
@marcioAlmada Kusur yok, sadece asgari yük. Array.c'de Ruby'nin yaptığı ilk şey bir dize türünü kontrol etmek ve ardından join yöntemini çağırmaktır. Ayrıca: gösteri kaynağı kayalar ile gözetlemek! Kendiniz deneyin: $ Array.instance_methods.*($ show-kaynak için kısaltmadır)
okket

1

İşte benim çözümüm:

@arr = ['<p>Hello World</p>', '<p>This is a test</p>']
@arr.reduce(:+)
=> <p>Hello World</p><p>This is a test</p>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.