由于数字索引,我不确定这是否可行,但希望有人能指出我正确的方向。

鉴于表:

t = { 13, 200, 12, 15, 23 }

如何使用数字嵌套表格?
t["200"] = {"stuff", "more stuff", "even more stuff"}

似乎不起作用,因为它会创建一个位置 200 并用 null 填充空单元格。我会添加一个字母作为后缀/前缀,但问题是试图按数字对表格进行排序。这甚至是可能的,还是我坚持使用不同的方法?谢谢!

由于实现而略有编辑:
t["200"] = {"stuff", "more stuff", "even more stuff"}

实际上创建了一个“200”的键,而:
t[200] = {"stuff", "more stuff", "even more stuff"}

使用其他所有内容创建索引 200 为空。

最佳答案

首先,DeadMG 是正确的;您使用了字符串而不是数字索引。但是,即使您确实使用了数字索引,也无济于事。

如果你这样做:

someTable = {"value1", "value2", {"value3a", "value3b"}};
someTable[50] = {"value50a", "value50b"};

表的长度 #someTable 仍然是 3 。为什么?因为 Lua 基于连续元素在表中定义数组。请记住:您可以访问任何表格的任何元素;它们在概念上都充满了 nil,直到你给它们一个实际值。

如果从数字索引 1 开始计数,直到达到第一个 nil 值,Lua 将表的长度定义为表中值的数量。由于 someTable[4] 为零,因此长度为 3。

如果你想在数组表的末尾插入一个新元素,那么你可以这样做:
someTable[#someTable + 1] = "newValue";

该值本身可以是一个表:
someTable[#someTable + 1] = {"newValuea", "newValueb"};

如果您只是询问如何访问嵌套表,那很简单,与您使用的键无关。

嵌套表没有什么特别之处。表就是值,表条目可以是任何值,包括其他表。

如果您有一个表,并且想要遍历其中的数组条目,请使用以下命令:
local aTable = {"first", "second", "third", ...}
for i, value in ipairs(aTable) do
    --`value` contains the entries in the table.
end

嵌套表也不异常(exception)。这只是获得 table 的问题。
本地嵌套表 = { "first", "second", "third", ...}
NestedTable[#nestedTable + 1] = {"newFirst", "newSecond", ...}
本地 aTable = 嵌套表 [#nestedTable];
对于 i,ipairs(aTable) 中的值做
-- value 包含表中的条目。
结尾

或者你可以只做 ipairs(nestedTable[#nestedTable]) 。请注意,此处使用的特定键(整数值)完全不重要。该键可能是一个字符串、一个浮点数、另一个表、一些用户数据等。这无关紧要。

另请注意,我们使用 ipairs 是因为我们只想迭代表的数组成员。数组的长度在上面定义。如果我们想遍历表的每个成员,我们将使用 pairs 而不是 ipairs 。当然,pairs 是做无序搜索的,所以不保证是数组顺序。

如果要递归查找嵌套表中的每个元素,可以执行以下操作:
local function RecursiveSearch(aTable)
    for key, value in pairs(aTable) do --unordered search
        if(type(value) == "table") do
            RecursiveSearch(value)
        else
            --Do something with this.
        end
    end
end

请注意,上述内容可以执行无限循环,因为表可能具有循环引用:
local tableA = {}
local tableB = {tableA}
local tableA[1] = tableB
RecursiveSearch(tableA) --Infinite loop.

关于lua - Lua 中的嵌套表和数字键,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6398939/

10-13 02:17