将带有字符串键的表格值插入到Lua表中。
2014-3-24 16:29:11
收藏:0
阅读:224
评论:2
我对Lua语言相对陌生,对于表格结构,显然缺少了某些东西。
我正在尝试创建一个由表格组成的表,其中表格中的每个表都有一个键,值是相应的表格。
好的,这个表达式可能有点混乱。这里是一个例子:
{{ key = "RC", value = {1, 2, 3, 4}},
{ key = "M", value = {4, 8, 7}},
{ key = "D", value = {3, 8, 9}}
...}
我使用了以下算法:
local listOfLists = {};
...
if condition1 then
listOfLists[key1] = list1;
end
...
if condition2 then
listOfLists[key2] = list2;
end
...
等等…… 我希望使用键来确定哪些列表已经添加到表格中。 但问题在于,即使满足所有条件,也似乎没有任何列表添加到表格中。
我可以在 listOfLists 中使用 table.insert(list1) 来代替 listOfLists[key1] = list1,但这样我就无法告诉哪些列表已经添加到集合中了。
任何建议吗?
点赞
用户2226988
Lua表是一种灵活的数据结构。元素是键值对。键可以是除nil之外的任何Lua值。值可以是除nil之外的任何值。将nil赋给值会删除该键值对。
具有键值为number类型且从1到n为整数的子集(可能为空的)称为序列。n被确定为与nil值配对的最后一个这样的键。几个表函数和运算符仅适用于序列。
表构造函数允许使用以下几种语法来指定键:
- 通过序列隐含:
{1, 2, 3} - 显式键:
{[1] = 1, [3] = 3, ["two"] = "value"} - 标识符键:
{one = 1, two = 2}
表构造函数可以使用它们的任意组合。
您定义了一个元素序列,每个元素都是一个具有两个元素的“表”,第二个元素是一个序列。
似乎您希望键为字符串,值为序列:
{
RC = {1, 2, 3, 4},
M = {4, 8, 7},
D = {3, 8, 9}
}
2014-03-23 23:11:38
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在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中获取用户配置主目录的跨平台方法
很难理解你想要实现什么。如果要得到更具体的答案,请提供更多信息。
你可以创建表中的表。
local map = {} map["key"] = { 1, 2, 3, 4 } print(map.key[3])或者你可以创建表中的数组
local vector = {} vector[1] = { 1, 2, 3, 4 } print(vector[1][2])或者你可以混合使用这两种方法。
如要创建
{{ key = "RC", value = {1, 2, 3, 4}}, { key = "M", value = {4, 8, 7}}, { key = "D", value = {3, 8, 9}} ...}你可以使用table constructor或从代码中使用其他方法。
local tbl = { { key = "RC", value = {1, 2, 3, 4}} } -- 从 constructor 初始化第一个元素 table.insert(tbl, { key = "M", value = {4, 8, 7}}) --使用 table.insert 和构造函数 tbl[2] = {} -- 基于数组的访问。 tbl[2].key = "D" -- 使用键访问 tbl[2]["value"] = { 3, 8, 9 } -- 另一种方式请注意,每个表由两个部分组成:从1到N的连续键的向量部分,以及映射其他的部分。某些函数,如表长运算符或ipairs迭代器,仅保证使用表的向量部分的工作。但它们执行得更快。
编辑:(最后一段的解释)
如果您有一个带有一些键的表,并要通过迭代来遍历,则可以使用ipairs或pairs。
ipairs是有序的,并从1到第一个非nil的元素。它不迭代非整数键。pairs遍历任何键,但不保证顺序。local map = { 1, 2, 3, key = 6, [5] = 5 } for i, v in ipairs(map) do print(v) --输出1,2,3。第一个nil元素是map [4]。map [5]将不被访问。 end for i, v in pairs(map) do -- 注意使用pairs print(v) --将以任何顺序输出1,2,3,5,6 end map [4] = 4 -- 填补空缺 for i, v in ipairs(map) do print(v) -- 输出1, 2, 3, 4, 5 。现在map[6]是第一个nil元素。 end长度运算符类似于
ipairs,它不计算ipairs方法未访问的元素。table.maxn 适用于数字索引,对于您的表将返回零。 官方文档说:
关于长度和table.maxn的小例子
local a = { 1, 2, 3, [5] = 5} print(table.maxn(a)) -- 5 print(#a) -- 3 a = { key = 4 } print(table.maxn(a)) -- 0 print(#a) -- 0 print(a["key"]) -- 4,没有丢失任何内容 local num = 0 for _, __ in pairs(a) do num = num + 1 end print(num) -- 1 找到了它。