假设我有一个传入的字符串,我想扫描它以查看它是否包含我选择为“坏”的任何词。 :)
将字符串拆分成一个数组,并将坏词保存在一个数组中,然后遍历每个坏词以及每个传入的词,看看是否有匹配项是否更快,有点像:
badwords.each do |badword|
incoming.each do |word|
trigger = true if badword == word
end
end
或者这样做是否更快:
incoming.each do |word|
trigger = true if badwords.include? word
end
或者保留字符串原样并使用看起来像这样的正则表达式运行 .match() 是否更快:
/\bbadword1\b|\bbadword2\b|\bbadword3\b/
或者性能差异几乎完全可以忽略不计?想知道这个问题有一段时间了。
最佳答案
您通过在找到匹配项时不停止循环来为正则表达式提供优势。尝试:
incoming.find{|word| badwords.include? word}
我的钱仍然在正则表达式上,但应该简化为:
/\b(badword1|badword2|badword3)\b/
或者让它成为一场公平的战斗:
/\a(badword1|badword2|badword3)\z/
关于ruby - 在这种情况下,正则表达式比数组比较快吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12234019/