由于数字索引,我不确定这是否可行,但希望有人能指出我正确的方向。
鉴于表:
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/