Ruby combina una matriz en una cadena

163

En Ruby, ¿hay alguna forma de combinar todos los elementos de la matriz en una sola cadena?

Matriz de ejemplo:

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

Salida de ejemplo:

<p>Hello World</p><p>This is a test</p>
dennismonsewicz
fuente
66
¡La documentación es tu amiga! Le ayudará considerablemente estudiar los métodos de Array, String, Hash, etc.
Mark Thomas

Respuestas:

303

Use el Array#joinmétodo (el argumento joines qué insertar entre las cadenas, en este caso un espacio):

@arr.join(" ")
sepp2k
fuente
1
¿Y si te unieras a los dígitos? [1,2,3] => 123?
stevenspiel
3
@ mr.musicman jointrabaja con enumerables de todo lo que responde to_s, incluidos los enteros, pero el resultado siempre será una cadena. Si desea un resultado entero, puede usarlo to_ien el resultado.
sepp2k
1
Si inicialmente rompió una cadena de varias líneas usando String#lines, puede volver a unirla usando my_string.join('')(tenga en cuenta el argumento de cadena vacía).
Frank Koehl
Para agregar a lo que dijo @ sepp2k: joinintenta #to_strprimero y #to_ssegundo.
Greg Navis
19

Si bien es un poco más críptico que join, también puede multiplicar la matriz por una cadena.

@arr * " "
David Harkness
fuente
1
Además de ser críptico, ¿hay alguna falla posible al usar este truco?
marcio
44
@marcioAlmada Sin fallas, solo gastos generales mínimos. En array.c, lo primero que hace Ruby es buscar un tipo de cadena y luego llamar al método de unión. Además: ¡haga palanca con rocas de fuente de espectáculo! Pruébelo usted mismo: $ Array.instance_methods.*($ es la abreviatura de show-source)
okket
1

Aquí está mi solución:

@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
fuente