Reputation: 13065
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: 57392
Reputation: 14716
[name, quest, favorite_color, speed].reject(&:empty?).join(' ')
Upvotes: 90
Reputation: 6621
You can use inject:
[name,quest,favorite_color,speed].inject("") {|k,v| v.empty? ? k : k << " " << v }.strip
Upvotes: 5