由于数字指数,我不确定这是否可行,但希望有人能指出我正确的方向。
鉴于以下表格:
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,其他所有内容为null。
答案 0 :(得分:4)
首先,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
嵌套表没有什么不同;这只是获得桌子的问题。
local nestedTable = {“first”,“second”,“third”,...}
nestedTable [#nestedTable + 1] = {“newFirst”,“newSecond”,...}
local aTable = nestedTable [#nestedTable];
对于我,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.
答案 1 :(得分:3)
或许查看您的作业可能会有所帮助:
t = { [1] = 13, [2] = 200, [3] = 12, [4] = 15, [5] = 23 }
要更改当前200
(即t[2]
),请执行以下操作:
t[2] = {"stuff", "more stuff", "even more stuff"}
编辑:这会导致您的表格如下所示:
t = { [1] = 13, [2] = {"stuff", "more stuff", "even more stuff"}, [3] = 12, [4] = 15, [5] = 23 }
-- or, equivalent::
t = { 13, {"stuff", "more stuff", "even more stuff"}, 12, 15, 23 }
答案 2 :(得分:1)
问题在于您使用“”。您的表格t
包含一堆数字,您输入的是字符串作为密钥。你想迭代表并做...你没有特别好定义的东西。但是,你不能在迭代时添加到表中,所以你可能需要做一些有趣的事情。
t = { 13, 200, 12, 15, 23 }
newt = {};
for key, value in pairs(t) {
newt[value] = { };
}
这将在newt中创建一个表条目,其中键是表t中的值,表示t中的所有值。