Lua中的嵌套表和数值键
我不确定是否可能由于数字索引,但希望有人能指导我方向。
给定以下表格:
` t = {13,200,12,15,23}
`
如何使用数字嵌套表格?
` t [“200”] = {“东西”,“更多东西”,“甚至更多的东西”}
`
似乎行不通,因为它会创建一个位置200并用null填充空单元格。我会添加字母作为后缀/前缀,但问题在于尝试按数字对表进行排序。这是否可能,还是我被困在不同的方法中?谢谢!
由于实现的轻微编辑:
` t [“200”] = {“东西”,“更多东西”,“甚至更多的东西”}
`
实际上创建了一个键为“200”的键,而:
` t [200] = {“东西”,“更多东西”,“甚至更多的东西”}
`
创建索引为200的其余内容均为空。
原文链接 https://stackoverflow.com/questions/6398939
首先,DeadMG是正确的,你使用了字符串而不是数字索引。然而,即使你使用了数字索引,也不会有所帮助。
如果你这样做:
someTable = {"value1", "value2", {"value3a", "value3b"}};
someTable[50] = {"value50a", "value50b"};
表的长度 #someTable
仍然是 3。为什么?因为 Lua 在表中基于连续元素定义数组。请记住:你可以访问任何表的任何元素;它们在概念上都填充了 nil
,直到你给它们一个实际的值。
Lua 将表的长度定义为从数字索引 1 开始,直到到达第一个 nil
值为止的值的数量。由于 someTable[4]
是 nil
,所以长度为 3。
如果你想要在数组表的末尾插入一个新元素,那么你可以这样做:
someTable[#someTable + 1] = "newValue";
这个值本身也可以是一个表:
someTable[#someTable + 1] = {"newValuea", "newValueb"};
如果你只是想知道如何访问一个嵌套的表,那很简单,并且与你使用的键无关。
嵌套表没有任何特殊之处。表是值,表条目可以是任何值,包括其他表。
如果你有一个表,并想要遍历其中的数组条目,则可以使用以下代码:
local aTable = {"first", "second", "third", ...}
for i, value in ipairs(aTable) do
-- `value` 包含表中的条目
end
嵌套表没有任何区别;只需要获得表即可。
local nestedTable = {"first", "second", "third", ...}
nestedTable[#nestedTable + 1] = {"newFirst", "newSecond", ...}
local aTable = nestedTable[#nestedTable];
for i, value in ipairs(aTable) do
-- `value` 包含表中的条目
end
或者你可以只需要 ipairs(nestedTable[#nestedTable])
。请注意,在这里使用的特定键(整数值)完全不重要。该键可以是字符串、浮点数、另一个表、某个用户数据等。毫无差别。
注意,我们使用 ipairs
,因为我们只想遍历表的数组成员。数组的长度在上面已经定义。如果我们想要循环遍历表的每个成员,我们将使用 pairs
而不是 ipairs
。当然,pairs
进行的是无序搜索,所以不能保证是按数组顺序的。
如果你想要递归查找嵌套表中的每个元素,可以使用以下代码:
local function RecursiveSearch(aTable)
for key, value in pairs(aTable) do --无序搜索
if(type(value) == "table") then
RecursiveSearch(value)
else
--执行某些操作
end
end
end
请注意,上述代码可能会进入无限循环,因为表可能具有循环引用:
local tableA = {}
local tableB = {tableA}
local tableA[1] = tableB
RecursiveSearch(tableA) -- 无限循环。
也许把你的任务看作是这样的会有帮助:
t = { [1] = 13, [2] = 200, [3] = 12, [4] = 15, [5] = 23 }
要更改当前的 200
(即 t[2]
),你可以这样做:
t[2] = {"一些东西", "更多的东西", "甚至更多的东西"}
编辑后,你的表会变成这样:
t = { [1] = 13, [2] = {"一些东西", "更多的东西", "甚至更多的东西"}, [3] = 12, [4] = 15, [5] = 23 }
-- 或者,等价于:
t = { 13, {"一些东西", "更多的东西", "甚至更多的东西"}, 12, 15, 23 }
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
- 如何编写 Lua 模式将字符串(嵌套数组)转换为真正的数组?
问题在于你使用了
""
。你的表t
包含一些 _数字_,而你正在输入一个 字符串 作为键。你想要遍历表并做一些......你没有特别定义的事情。然而,在迭代表时不能向表中添加内容,所以可能需要做一些有趣的事情。t = { 13, 200, 12, 15, 23 } newt = {}; for key, value in pairs(t) do newt[value] = { }; }
这将为
newt
中的每个t
表中的值创建一个表条目,其中键是表t
中的值。