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>

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

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

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>
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.