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 = 1000000
Benchmark.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
map
instead ofcollect
and*
instead ofjoin
if you're starving to make your code smaller:%w[a b c].map{|x|"'#{x}'"}*', '
. – Hypozeugma'
by itself, e.g.["a", "b'cd"]
? – Rianna