string#gsub链的性能影响?

时间:2013-02-07 21:38:20

标签: ruby regex coding-style

对于Ruby中的字符串,.gsub和/或.sub方法链是否有任何性能影响?

例如,以下是Rails源中为图像创建alt标记的方法示例。它删除了文件扩展名和摘要(如果有的话)。

def image_alt(src)
  File.basename(src, '.*').sub(/-[[:xdigit:]]{32}\z/, '').capitalize
end

在我的应用中,我希望它将下划线或连字符更改为空格,因此我想在最后添加gsub方法:

def image_alt(src)
  File.basename(src, '.*').sub(/-[[:xdigit:]]{32}\z/, '').gsub(/(_|-)/, ' ').capitalize
end

这会在性能或风格方面引发危险吗?

3 个答案:

答案 0 :(得分:7)

str.tr('-_', ' ') 

值得考虑(doc

答案 1 :(得分:0)

我没有遇到过问题。我在几个程序中使用了多个gsub次调用,而且我没有遇到性能问题。从性能角度来看,我不担心。至于风格,我想这是个人喜好。我个人试图不惜一切代价避免使用正则表达式。但那只是我。

答案 2 :(得分:0)

当链中的正则表达式的匹配不应该重叠时,在单个StringScanner次迭代中在条件下运行它们,同时将结果输出到StringIO可以提高性能。