Ruby 为什么字符串比较比整数比较快?
在我最近花了一些时间的一个Ruby项目中,我一直在计算两大组字符串的交集 根据我的理解,我认为比较整数而不是字符串是很有意义的(所有这些字符串都保存在数据库中,我可以轻松地将它们换成ID) 当我真正进行基准测试时,我发现了完全相反的结果 首先,我生成了850个字符串集和850个大整数集:Ruby 为什么字符串比较比整数比较快?,ruby,string,integer,Ruby,String,Integer,在我最近花了一些时间的一个Ruby项目中,我一直在计算两大组字符串的交集 根据我的理解,我认为比较整数而不是字符串是很有意义的(所有这些字符串都保存在数据库中,我可以轻松地将它们换成ID) 当我真正进行基准测试时,我发现了完全相反的结果 首先,我生成了850个字符串集和850个大整数集: r = Random.new w1 = (1..850).collect{|i| w="";(0..3).collect{|j| (rand*26 + 10).to_i.to_s(35)}.each{|l| w
r = Random.new
w1 = (1..850).collect{|i| w="";(0..3).collect{|j| (rand*26 + 10).to_i.to_s(35)}.each{|l| w+=(l.to_s)};w}.to_set
w2 = (1..850).collect{|i| w="";(0..3).collect{|j| (rand*26 + 10).to_i.to_s(35)}.each{|l| w+=(l.to_s)};w}.to_set
i1 = (1..2000).collect{|i| (r.rand*1000).to_i**2}.to_set;
i2 = (1..2000).collect{|i| (r.rand*1000).to_i**2}.to_set;
然后我对比较进行计时:
t=Time.now;(0..1000).each {|i| w1 & w2};Time.now-t
=> 0.301727
t=Time.now;(0..1000).each {|i| i1 & i2};Time.now-t
=> 0.70151
我觉得这太疯狂了!我一直认为整数比较快得多
所以我想知道堆栈世界中是否有人知道为什么ruby中的字符串比较要快得多,我真的很想听听你的想法。整数比较仍然是最快的。
查看此链接:
- ,对各种Ruby版本进行了出色的比较
755.times{| x | w2速度较慢的原因是您没有获得足够多的匹配项。需要时间的是构建交叉点的新数组,而不是实际匹配本身。回答得很好。.写得很好,描述得很好。感谢您的帮助。:]
1.9.2p180 :006 > t=Time.now;(0..1000).each {|i| w1 & w2};Time.now-t
=> 1.020355
1.9.2p180 :007 > t=Time.now;(0..1000).each {|i| i1 & i2};Time.now-t
=> 2.057535
1.9.2p180 :051 > 755.times {|x| w2 << w1.to_a[x]}
1.9.2p180 :052 > w2 = w2.to_a[-849..-1].to_set
1.9.2p180 :053 > t=Time.now;(0..1000).each {|i| w1 & w2};Time.now-t
=> 2.014967
1.9.2p180 :054 > t=Time.now;(0..1000).each {|i| i1 & i2};Time.now-t
=> 2.037542
1.9.2p180 :055 > [i1.length, i2.length, w1.length, w2.length, (i1 & i2).length, (w1 & w2).length]
=> [857, 884, 849, 849, 755, 754]