Ruby объединяет массив в одну строку

163

В Ruby есть способ объединить все элементы массива в одну строку?

Пример массива:

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

Пример вывода:

<p>Hello World</p><p>This is a test</p>
dennismonsewicz
источник
6
Документация - твой друг! Это поможет вам значительно изучить методы Array, String, Hash и т. Д.
Марк Томас

Ответы:

303

Используйте Array#joinметод (аргумент to join- это то, что нужно вставить между строками - в данном случае пробел):

@arr.join(" ")
sepp2k
источник
1
что если вы соединяете цифры? [1,2,3] => 123?
Stevenspiel
3
@ mr.musicman joinработает со списками всех ответов to_s, включая целые числа, но результатом всегда будет строка. Если вы хотите получить целочисленный результат, вы можете использовать to_iрезультат.
sepp2k
1
Если вы изначально разбили многострочную строку с помощью String#lines, вы можете разумно связать ее вместе, используя my_string.join('')(обратите внимание на пустой аргумент строки).
Фрэнк Коэль
Чтобы добавить к тому, что @ sepp2k сказал: joinпытается #to_strпервое и #to_sвторое.
Грег Навис
19

Хотя это немного более загадочно join, вы также можете умножить массив на строку.

@arr * " "
Дэвид Харкнесс
источник
1
Помимо того, что загадочный, есть ли возможный недостаток при использовании этого трюка?
Марсио
4
@marcioAlmada Нет недостатков, просто минимальные накладные расходы. В файле array.c первое, что делает Ruby, проверяет тип строки и затем вызывает метод join. Также: подглядывайте в скалах-источниках! Попробуйте сами: $ Array.instance_methods.*($ - сокращение для шоу-источника)
окк
1

Вот мое решение:

@arr = ['<p>Hello World</p>', '<p>This is a test</p>']
@arr.reduce(:+)
=> <p>Hello World</p><p>This is a test</p>
фон спотц
источник