自动分配指定表的键值
2017-12-16 22:58:41
收藏:0
阅读:84
评论:2
我有三个表格。 其中一个是整数,一个是字符串,另一个是空的。 这三个表都会自动填充。 一旦填充完前两个表格(两个表格的条目数相等),我希望第三个表格自动填充,其中每个条目的键是表 'a' 的值,每个条目的值是表 'b' 的值。表 'a' 总是具有唯一的值。由于我是 Lua 的新手,请尽可能详细说明。
示例:
a = {"joe", "bob", "bill"}
b = {"24", "111", "32"}
c = {joe = "24", bob = "111", bill = "32"}
我当前的表格是这样创建的:
a = {}
b = {}
c = {}
functionThatPopulatesTableA()
end
for i, #a do
b[i] = functionThatReturnsSpecificValue()
end
我填充表 c 的尝试结果看起来像这样:
function charlie()
for k, v in pairs(a) do
c[v] = a[v]
c[k] = b[v]
end
end
毫无疑问,那并没有起作用。
点赞
用户5331361
我假设你的表 a 和 b 只是值的数组:
a = {"joe", "bob", "bill"}
b = {"24", "111", "32"}
在这种情况下(如果你没有任何 nil 值),你可以使用普通的 for 循环(# 是 length 运算符,它给你数组大小)
-- 处理表具有不同数量元素的情况
local minSize = math.min(#a, #b)
for i = 1, minSize do
local key = a[i] -- 从表 a 中获取键
c[key] = b[i] -- 从 b 中放入相应的值
end
如果你有存在 nil 值的表,那么这段代码将不起作用,像这样:
a = {"joy", nil, "bill" }
b = {"24", nil, "32"}
因此,在 nil 值的情况下请使用 pairs(我修复了你的代码-请参见注释):
for k, v in pairs(a) do
-- k 等于表 a 的索引
-- v 是该索引的表值
c[v] = b[k]
end
如果我们以上面的表作为示例,它将按以下方式工作:
循环开始
选择 k = 1,v = “joe”
c["joe"] = b[1]
选择 k = 3,v = “bill”(记住,我们将元素 2 设置为 nil 吗?
c["bill"] = b[3]
循环结束
2017-12-17 05:57:36
评论区的留言会收到邮件通知哦~
推荐文章
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的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 代码?

你需要更加批判地思考每种情况中的“键”和“值”。
试着像计算机一样思考:
for k, v in pairs(a) do c[v] = a[v] c[k] = b[v] end所以,你在示例中对
a进行的循环看起来像这样:k v -------------- 1 "joe" 2 "bob" 3 "bill"因此,
c[v] = a[v]变成了c["joe"] = a["joe"],这变成了c["joe"] = nil,因为a["joe"]未定义。所以,这显然行不通。现在,让我们看看有效的函数:
for k, v in pairs(a) do c[k] = a[v] c[v] = b[k] end虽然这还不是完全正确的,但最终它确实能够工作。例如,使用与之前相同的示例,
c[k] = a[v]变成了c[1] = a["joe"],这变成了c[1] = nil,因为所有未定义的表值都是nil。可以将此行从函数中删除,因为它实际上并没有做任何事情。接下来,
c[v] = b[k]变成了c["joe"] = b[1],这变成了c["joe"] = 24,这正是你想要的。