최근 루비 프로젝트에서 나는 몇 시간을 보내고있다. 두 개의 큰 문자열 세트의 교차점을 세고있다.문자열 비교가 정수 비교에 비해 왜 빠른가요?
나는 내가 이해할 것이라고 생각했기 때문에 문자열 대신 정수를 비교하는 것이 합리적이라고 결정했다. (이 모든 문자열은 데이터베이스에 저장되어 있으며 쉽게 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