在我最近花了一些時間的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