我只是在测试一些数组操作并执行ol'reverse-an-array问题(在高级别),看看Ruby的x,y = y,x swap和典型的使用之间的性能差异-a-临时变量交换方法:
# using Ruby's swap
z = arr.length-1
for x in 0..(z/2)
arr[x], arr[z - x] = arr[z - x], arr[x]
end
# using standard temp var
z = arr.length-1
for x in 0..(z/2)
temp = arr[x]
arr[x] = arr[z - x]
arr[z - x] = temp
end
Ruby的快捷方式交换速度慢了约40%。我猜有一些额外的数组引用已经完成了吗?但是我没有看到那些额外操作会在哪里完成......我只是假设Ruby在幕后进行了一次临时变换。
编辑:这是我正在使用的基准:
def speed_test(n)
t = Time.now
n.times do
yield
end
Time.now - t
end
tn = speed_test(TIMES) do
# code...
end
阵列只是:
arr = 10000.times.map
答案 0 :(得分:2)
我猜这个问题与你的基准有关。可能第一个循环将所有内容都带入缓存。然后第二个循环运行相同的代码但它碰巧更快,因为缓存是新鲜的。
快速检查一下,尝试颠倒两个循环的顺序!