访问没有索引的表中的前一个元素

时间:2013-09-06 19:42:24

标签: lua lua-table

我制作了一个楼层元素表:

map.list = {}
--first element
firstfloor = {}
firstfloor.x = 50
firstfloor.y = 800
firstfloor.width = 500
firstfloor.height = screenHeight - firstfloor.y
table insert(map.list,firstfloor)

现在我需要为下一层做一个构造函数。 “x”值只是前一层的“x”位置+它的宽度。

function map:newFloor(x,y,width)
        local floor = {}
        floor.x = ??? --previous floor's x + previous floor's width
        floor.y = y
        floor.width = width
        floor.height = screenHeight - floor.y
        table.insert(map.list,floor)
        return floor
end

正如你所看到的,这里没有指数。我如何访问前一个元素的值?

1 个答案:

答案 0 :(得分:3)

当您使用table.insert时,值 do 具有索引( Lua表中的每个值都有一个索引)。它们被分配给第一个可用的数字索引 - 数组的长度加1.在Lua中,#运算符给出了数组样式表的长度:

local list = {}
table.insert(list,'foo') -- equivalent to list[1] = 'foo'
table.insert(list,'bar') -- equivalent to list[2] = 'bar'
table.insert(list,'baz') -- equivalent to list[3] = 'baz'
print(#list) -- prints '3'

您可以通过检查表长度的键,最后一个值(请记住,Lua数组传统上从1开始)来访问数组中的最后一个值:

print(list[#list]) -- prints 'baz'

因此,要访问上一个元素的值,您将获得列表中的最后一项并检查:

local lastfloor = map.list[#map.list]
-- assuming floor is defined somewhere above
floor.x = lastfloor.x + lastfloor.width

迂腐:如果你的表有两个非nil值之间的数字索引处的“空洞”(nil值),那么像“长度”这样的概念会变得模糊。它看起来不会影响这个特定的用例,但它会出现。