使用“数组样式”表是否比使用“地图样式”表提供更快的读取访问速度?

bob*_*bob 3 lua

我正在使用 Love2D 用 Lua 编写游戏。

每个实体显然都有一个 x,y 位置,这只是一个名为“位置”的表,其中包含 {x, y}(即 {10, 4})。

到目前为止,我一直在使用数组运算符实现该表,因此要获取 x 值,我将调用position[1],要获取 y 值,我将调用position[2]。

然而,为了可读性,我宁愿调用position.x和position.y。这将涉及以“地图”样式使用表格,例如position = {x=10, y=4}.

虽然数组查找时间显然必须是 O(1),但我担心使用映射样式会产生更糟糕的结果,因为映射内部往往比简单数组复杂一百万倍。

在某种程度上,我怀疑性能差异是否会产生很大影响,即使在我的主游戏循环中每分钟调用一百万次。我只是想更好地了解我用来创建这个游戏的工具。

谢谢!

Ole*_*kov 5

是的,数组总是比表更快,但是与执行其他任务所花费的时间相比,差异通常可以忽略不计。除非您会在非常紧密的循环中不断访问您的新密钥.x.y数千次迭代,否则您甚至不应该打扰。

但是,如果您这样做,有几种方法可以减轻任何差异。

本地化您检索到的值:

-- Old - 3 lookups
result = obj.x + --[[ some long calculations ]] obj.x + --[[ more long calculations ]] obj.x

-- New - 1 lookup
local x = obj.x
result = x + --[[ some long calculations ]] x + --[[ more long calculations ]] x
Run Code Online (Sandbox Code Playgroud)

继续使用数组,但为索引的幻数定义“常量”以提高可读性

local X = 1
local Y = 2
print("Object coordinates are X: " .. obj[X] .. ", Y: " .. obj[Y])
Run Code Online (Sandbox Code Playgroud)