我只是测试了一些数组操作,并做了ol'reverse-an-array问题(高级别),看看Ruby的x,y = y,x swap和典型的使用-temperature之间的性能差异-variable-to-swap方法:Ruby的变量swap:x,y = y,x - 对于数组引用似乎比较慢?
# 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在幕后做了temp-var-swap。
编辑:这是我使用的基准:
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
Ruby很可能为(y,x)创建一个元组对象,然后将该元组解包为x,y的赋值。 – Amber