最近私が少し時間を費やしてきたRubyプロジェクトでは、2つの大きな文字列の交点を数えています。なぜ文字列比較は整数比較に比べて速いのですか?
文字列の代わりに整数を比較するのは大変意味があると判断しました(これらの文字列はすべてデータベースに保持されていますが、簡単にidsの代わりに使用できます)
私が実際にベンチマークをしたとき、私は完全な反対を見つけることになった。
まず私は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