2010-03-12 28 views
30

Tengo 4 variables de cadena name, quest, favorite_color, speed que pueden estar vacías. Quiero concatenarlos a todos juntos, poniendo espacios entre los que no están vacíos. La simplicidad del código, es decir, lo simple que es mirar y comprender, es más importante que la velocidad.Ruby concatenar cadenas y agregar espacios

Así:

name = 'Tim' 
quest = 'destroy' 
favorite_color = 'red' 
speed = 'fast' 

convierte

'Tim destroy red fast' 

y

name = 'Steve' 
quest = '' 
favorite_color = '' 
speed = 'slow' 

se convierte en:

'Steve slow' 

Tenga en cuenta que solo hay 1 espacio entre 'Steve' y 'slow'.

¿Cómo hago eso (preferiblemente en 1 línea)?

Respuesta

67
[name, quest, favorite_color, speed].reject(&:empty?).join(' ') 
+1

Cuando pruebo esto, aparece el siguiente error: "Error en la línea 5: tipo de argumento incorrecto Símbolo (Proc esperado)" ¿Qué me estoy perdiendo? –

+0

Probablemente estés usando Ruby <1.8.7. Pruebe '[name, quest, favorite_color, speed] .reject {| s | s.empty?}. join ('') ' –

+0

¿Qué versión de Ruby? También podría intentar: [name, quest, favorite_color, speed] .reject {| s | s.empty?}. join ('') –

5

Puede utilizar inyecte:

[name,quest,favorite_color,speed].inject("") {|k,v| v.empty? ? k : k << " " << v }.strip 
+0

1 para una respuesta de trabajo, aunque es menos fácil de leer (y por lo tanto el mantenimiento) que los otros. –

+0

Tiene razón en todos los puntos. La respuesta de Aarón es mejor. –

18

Trate [name,quest,favorite_color,speed].join(' ').squeeze(' ')

+1

este parece más simple. – Allyn

+0

También es el más rápido. – ghoppe

+0

Esto solo sacará espacios. Pero si hay espacios en la cadena individual, no puedo hacer que se eliminen. –

Cuestiones relacionadas