tags:

views:

65

answers:

4

What's the best idiomatic (cleanest) way to convert an array of strings into a string, while keeping the enclosing quotes for each elements.
In other words, from this:

a = ["file 1.txt", "file 2.txt", "file 3.txt"]

I'd need to get this

"'file 1.txt' 'file 2.txt' 'file 3.txt'"

Single and double quotes could be interchanged here. The best ways I know of is by using map and inject/reduce.

eg: a.map{|dir| "'" + dir + "'"}.join(' ')
eg2: a.reduce("'"){|acc, dir| acc += dir+"' "}

Performance could be improved by avoiding temp string creation (+ operator). That's not my main question though. Is there a cleaner more concise way to achieve the same result?

+6  A: 

Try out

"'#{a.join("' '")}'"
statenjason
All those quotes are finicky but you've got the best answer so far.
Alkaline
I'm not saying this is bad, but it doesn't exactly read naturally either. It's the sort of thing that will make even an experienced Rubyist go "Huh?" at first glance.
Chuck
A: 

"'" + a.join("' '") + "'"

bensie
+2  A: 

Shorter doesn't always mean simpler. Your first example was succinct, readable, and easily changeable, without being unnecessarily complex.

a.map{|s| "'#{s}'"}.join(' ')
CaptainPete
A: 
"'"+a*"' '"+"'"

or

"'#{a*"' '"}'"

or

a.to_s[1...-1].gsub /",?/,"'"
gnibbler