在我最近花了一些时间的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+=(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
,我认为是疯了!我一直认为整数比较要快得多..
所以我想知道是否有人在堆栈世界知道任何关于为什么字符串比较在红宝石的速度如此之快,我真的很感激听到你的想法。
伟大的答案..写得好,描述性强。谢谢您的帮助。 :] – BananaNeil 2012-01-13 12:12:52