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