如何改进用“`引用所有数组元素的代码并返回一个包含所有引用和逗号分隔元素的字符串?
我正在使用Rails 3.2.2,我想用'
引用所有数组元素'
并返回一个包含所有引用和逗号分隔元素的字符串。 这时我正在使用
['a', 'b', 'c'].collect {|x| "'#{x}'"}.join(", ") # => "'a', 'b', 'c'"
但我认为我可以改进上面的代码(可能是通过使用我不知道的Ruby方法,如果它存在)。 可能吗?
我用
"'#{%w{abc}.join("', '")}'"
这是扩展版本:
' # Starting quote %w{abc}.join("', '") # Join array with ', ' delimiter that would give a', 'b', 'c ' # Closing quote
您可以使用其别名map
替换collect
,使用等效的*
替换.join
。 最后,您可以使用快捷方式编写字符串数组 %w(...)
,并且可以对.join
/ *
的参数使用单引号,因为它不使用字符串插值(尽管如果它可能有问题它在性能方面更受欢迎 )。
%w(abc).map {|x| "'#{x}'"} * ', '
看来这个版本和原版没有性能差异,但是Sigurd的版本表现更好:
原始3.620000 0.000000 3.620000(3.632081) 这个3.640000 0.000000 3.640000(3.651763) Sigurd的2.300000 0.000000 2.300000(2.303195)
基准代码:
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(abc).map {|x| "'#{x}'"} * ', ' end} x.report("Sigurd's") { n.times do "'#{%w{abc}.join("', '")}'" end} end