Reputation: 13115
I have 4 string variables name, quest, favorite_color, speed
that might be empty. I want to concatenate them all together, putting spaces between those that aren't empty. Simplicity of the code, i.e how simple is to to look at and understand, is more important than speed.
So:
name = 'Tim'
quest = 'destroy'
favorite_color = 'red'
speed = 'fast'
becomes
'Tim destroy red fast'
and
name = 'Steve'
quest = ''
favorite_color = ''
speed = 'slow'
becomes:
'Steve slow'
Note there is only 1 space between 'Steve' and 'slow'.
How do I do that (preferably in 1 line)?
Upvotes: 44
Views: 57419
Reputation: 14736
[name, quest, favorite_color, speed].reject(&:empty?).join(' ')
Upvotes: 90
Reputation: 6651
You can use inject:
[name,quest,favorite_color,speed].inject("") {|k,v| v.empty? ? k : k << " " << v }.strip
Upvotes: 5