How to improve code that quotes all array elements with `'` and returns a string containing all those quoted and comma-separated elements? How to improve code that quotes all array elements with `'` and returns a string containing all those quoted and comma-separated elements? arrays arrays

How to improve code that quotes all array elements with `'` and returns a string containing all those quoted and comma-separated elements?


I use

"'#{%w{a b c}.join("', '")}'"

Here is expanded version:

' # Starting quote%w{a b c}.join("', '") # Join array with ', ' delimiter that would give a', 'b', 'c' # Closing quote


You can replace collect with its alias map and .join with the equivalent *. Finally, you can use the shortcut for writing an array of strings, %w(...), and you can use single quotes for the argument of .join/* as it does not use string interpolation (though it may be questionable if it preferable when it comes to performance).

%w(a b c).map {|x| "'#{x}'"} * ', '

It appears there is no performance difference between this version and the original but that that Sigurd's version is performing better:

Original  3.620000   0.000000   3.620000 (  3.632081)This  3.640000   0.000000   3.640000 (  3.651763)Sigurd's  2.300000   0.000000   2.300000 (  2.303195)

Code for benchmark:

require 'benchmark'n = 1000000Benchmark.bm do |x|  x.report("Original") { n.times do      ['a', 'b', 'c'].collect {|x| "'#{x}'"}.join(", ")    end}  x.report("This") { n.times do      %w(a b c).map {|x| "'#{x}'"} * ', '    end}  x.report("Sigurd's") { n.times do      "'#{%w{a b c}.join("', '")}'"    end}end