Flatten an array of strings in Ruby
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(' ')
a.reduce("'"){|acc, dir| acc += dir+"' "}
Performance could be improved by avoiding temp str开发者_运维问答ing creation (+ operator). That's not my main question though. Is there a cleaner more concise way to achieve the same result?
Shorter doesn't always mean simpler. Your first example was succinct, readable, and easily changeable, without being unnecessarily complex.
a.map { |s| "'#{s}'" }.join(' ')
Try out
"'#{a.join("' '")}'"
Or if golfing
?'+a*"' '"+?'
Try this:
"'" + a.join("' '") + "'"
"'"+a*"' '"+"'"
or
"'#{a*"' '"}'"
or
a.to_s[1...-1].gsub /",?/,"'"
精彩评论