Ruby的变量swap:x,y = y,x - 对于数组引用似乎更慢?

时间:2011-10-03 13:00:22

标签: ruby arrays algorithm

我只是在测试一些数组操作并执行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

1 个答案:

答案 0 :(得分:2)

我猜这个问题与你的基准有关。可能第一个循环将所有内容都带入缓存。然后第二个循环运行相同的代码但它碰巧更快,因为缓存是新鲜的。

快速检查一下,尝试颠倒两个循环的顺序!