1
我有一個散列數組,其密鑰爲Date
,值爲Integer
。 這是一個模擬它的測試代碼。爲什麼Range#include?比運算符大於或小於
hashes = 2000.times.map do |i|
[Date.new(2017) - i.days, rand(100)]
end.to_h
我想獲取特定時期的值。 起初我用Range#include?
寫了,但是速度很慢。
Benchmark.measure do
hashes.select{|k,v| (Date.new(2012,3,3)..Date.new(2012,6,10)).include?(k)}
end
#<Benchmark::Tms:0x007fd16479bed0 @label="", @real=2.9242447479628026, @cstime=0.0, @cutime=0.0, @stime=0.0, @utime=2.920000000000016, @total=2.920000000000016>
簡單大於或小於運營商,它變得快了60倍。
Benchmark.measure do
hashes.select{|k,v| k >= Date.new(2012,3,3) && k <= Date.new(2012,6,10)}
end
#<Benchmark::Tms:0x007fd162b61670 @label="", @real=0.05436371313408017, @cstime=0.0, @cutime=0.0, @stime=0.0, @utime=0.05000000000001137, @total=0.05000000000001137>
我以爲這兩個表達基本相同。
爲什麼有這麼大的差異?