ruby:optimize => phrase.split(delimiter).collect {| p
发布时间:2020-12-17 03:57:52 所属栏目:百科 来源:网络整理
导读:ruby:什么是最优化的表达式来评估与结果相同的结果 phrase.split(delimiter).collect {|p| p.lstrip.rstrip } 解决方法 为了清晰起见,我更喜欢以下内容: phrase.split(delimiter).collect(:strip) 但我认为你想要优化速度.我不知道为什么其他人在猜测.找出
ruby:什么是最优化的表达式来评估与结果相同的结果
phrase.split(delimiter).collect {|p| p.lstrip.rstrip } 解决方法
为了清晰起见,我更喜欢以下内容:
phrase.split(delimiter).collect(&:strip) 但我认为你想要优化速度.我不知道为什么其他人在猜测.找出更快速的方法的唯一方法是对代码进行基准测试. 确保调整基准参数 – 这只是一个例子. require "benchmark" # Adjust parameters below for your typical use case. n = 10_000 input = " This is - an example. - A relatively long string " + "- delimited by dashes. - Adjust if necessary " * 100 delimiter = "-" Benchmark.bmbm do |bench| bench.report "collect { |s| s.lstrip.rstrip }" do # Your example. n.times { input.split(delimiter).collect { |s| s.lstrip.rstrip } } end bench.report "collect { |s| s.strip }" do # Use .strip instead of .lstrip.rstrip. n.times { input.split(delimiter).collect { |s| s.strip } } end bench.report "collect { |s| s.strip! }" do # Use .strip! to modifiy strings in-place. n.times { input.split(delimiter).collect { |s| s.strip! } } end bench.report "collect(&:strip!)" do # Slow block creation (&:strip! syntax). n.times { input.split(delimiter).collect(&:strip!) } end bench.report "split(/s*#{delim}s*/) (static)" do # Use static regex -- only possible if delimiter doesn't change. re = Regexp.new("s*#{delimiter}s*") n.times { input.split(re) } end bench.report "split(/s*#{delim}s*/) (dynamic)" do # Use dynamic regex,slower to create every time? n.times { input.split(Regexp.new("s*#{delimiter}s*")) } end end 我的笔记本电脑上的结果与上面列出的参数: user system total real collect { |s| s.lstrip.rstrip } 7.970000 0.050000 8.020000 ( 8.246598) collect { |s| s.strip } 6.350000 0.050000 6.400000 ( 6.837892) collect { |s| s.strip! } 5.110000 0.020000 5.130000 ( 5.148050) collect(&:strip!) 5.700000 0.030000 5.730000 ( 6.010845) split(/s*#{delim}s*/) (static) 6.890000 0.030000 6.920000 ( 7.071058) split(/s*#{delim}s*/) (dynamic) 6.900000 0.020000 6.920000 ( 6.983142) 从上面我可以得出结论: >使用strip而不是.lstrip.rstrip更快. 我能想到的事情可能会影响结果: >分隔符的长度(以及是否为空格). 但是不要相信我的话.测量它! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |