比较字符串和模式
的最快方法据我所知,我有两个选项来比较字符串和模式:使用=~ 比较。使用matchstr()函数这个:quot;patternlt;用matchstr()做点什么quot;patternlt;做
解答动态
运算符版本=~很可能比matchstr快。这是给一对夫妇的原因:函数调用在vim脚本中,costmatchstr返回一个字符串,因此有一个额外的allocation I已经做了一个直接的性能比较。
let t=reltime()对于范围(1000000)中的x,如果matchstr('strpatingpattern','pattern')endifendforecho reltimestr(reltime(t))let t=reltime()对于范围(1000000)中的x如果match('strpatingpattern','pattern')endifendforecho reltimestr(reltime(t))让t=reltime()表示范围(1000000)内的x如果'strpatingpattern'=~'pattern'endifendforecho reltimestr(reltime(t)) 结果:
3.9925003.817862 3.354163 差异不大,但我们可以看到matchstr是最慢的方法,match在中间,and=~是最快的。
Use=~当您需要二进制输出时,当您需要提供额外的输出或输入时,请使用match或matchstr。
我运行了@Mass bench来避免:因为我有过与控制语句相关联的额外成本的经验。
My复杂的解决方案也尽最大努力避免lambdas.
函数!lh#time#bench?n2(n,F,…)中止如果type(a:F)==type(function('type'))让benchs=map(range(1,a:n),'[reltime()]+[a:F()]+[reltime()]')否则让benchs=map(range(1,a:n),'[reltime()]+['.a:F.']+[reltime()]')endif让res=benchs[0][1]调用map(benchs),'reltimefloat(v:val[0],v: val[2]))')让accu=[0]调用map(copy(benchs),'add(accu,v:val+accu[-1])返回[res,accu[-1]]endfunction ,在质量'bench
echo lh#time#bench#n2(1000000,quot;)echo lh#time#bench#n2(1000000,quot;)echo lh?time?bench?n2(1000000,quot;)echo lh?time?bench?n2(1000000,quot;) 最后,结果在我的机器上更稳定一点——但是有时=~比=~?快一点,有时则相反。而且,现在我确信它是复杂的,而且没有必要:Mass的简单解决方案已经足够了。
“Mass”bench为了有一个想法5.726717 5.520035 4.839088“Mine”[“pattern”,4.724165][9,4.75635][1,4.313803][1,4.557732] 在结论中,是的matchstr()比match()慢一点,比=~慢一点,但说实话?我怀疑你是否会注意到这种差异,即使是在处理100k或1M标签时。当您需要matchstr()或match()或。。。额外的服务,使用它们。否则,使用您希望/喜欢/喜欢的任何东西来测试它是否匹配。- End
免责声明:
本页内容仅代表作者本人意见,若因此产生任何纠纷由作者本人负责,概与琴岛网公司无关。本页内容仅供参考,请您根据自身实际情况谨慎操作。尤其涉及您或第三方利益等事项,请咨询专业人士处理。