【发布时间】:2012-02-09 14:38:11
【问题描述】:
在我最近花费了一些时间的 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
我认为这很疯狂!我一直认为整数比较要快得多..
所以我想知道堆栈世界中是否有人知道为什么字符串比较在 ruby 中要快得多,我非常感谢您的想法。
【问题讨论】: