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

后端 未结 2 906
醉梦人生
醉梦人生 2021-02-14 18:42

I am using Rails 3.2.2 and I would like to quote all array elements with \' and return a string containing all those quoted and comma-separated elements. At this ti

2条回答
  •  滥情空心
    2021-02-14 18:51

    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
    

提交回复
热议问题