我正在使用 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),但我担心使用映射样式会产生更糟糕的结果,因为映射内部往往比简单数组复杂一百万倍。
在某种程度上,我怀疑性能差异是否会产生很大影响,即使在我的主游戏循环中每分钟调用一百万次。我只是想更好地了解我用来创建这个游戏的工具。
谢谢!
是的,数组总是比表更快,但是与执行其他任务所花费的时间相比,差异通常可以忽略不计。除非您会在非常紧密的循环中不断访问您的新密钥.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)