Lua: Tables: 比较键(而不是它们的值)
我非常新于lua,所以请不要介意我这个新手的问题。因为奇怪的措辞,我在这里没有找到我的确切问题。
我有以下表格:
local DialogueMode = {
uniqueDialogue = {0, 3},
general = {1, 2},
job = {3, 5},
rumors = {4, 3},
annoyed = {5, 0},
pissed = {6, 0},
ignore = {7, 0}
}
以下是循环:
for k,v in pairs(DialogueMode) do
print(k .. ' ' .. tostring(isDialogueModeCompatible(playerTools, npc, k)))
end
以下是if函数:
local function isDialogueModeCompatible(playerTools, npc, dialogueMode)
print(tostring(dialogueMode) .. " " .. tostring(DialogueMode.uniqueDialogue) .. " " .. tostring(dialogueMode == DialogueMode.uniqueDialogue))
end
对于uniqueDialogue,它会打印出:
uniqueDialogue table: 4df7e3ad false
为什么dialogueMode == DialogueMode.uniqueDialogue 不像我期望的那样工作?我如何让它按照我期望的方式工作?我正在尝试使用表作为枚举器,但是这给我带来了问题。
提前感谢!
问题在于,你想要打印什么?你只想要将表格打印出来吗?如果你想要使函数递归搜索表格并将其打印出来,那比你现在所拥有的更加复杂,仅仅因为递归的本质如此。
此外,dialogueMode == DialogueMode.uniqueDialog 返回 false 的原因是因为 dialogueMode 被赋值为 k,即字符串 "uniqueDialog"。而 DialogueMode.uniqueDialog 是整个 uniqueDialog 表格,而 dialogueMode 只是键值、表的名称,被转换为字符串。代码可以如下:
--不是我的代码,信誉在这里:https://gist.github.com/hashmal/874792
function tprint(tbl, indent)
if not indent then indent = 0 end
for k, v in pairs(tbl) do
formatting = string.rep(" ", indent) .. k .. ": "
if type(v) == "table" then
print(formatting)
tprint(v, indent+1)
else
print(formatting .. v)
end
end
end
tprint(DialogueMode)
请注意,这可能不适用于所有情况,但对于您的表格来说,它确实成功地转储了整个表格。如果遇到错误,请在 github 上查找修复方法(或者自己修复:D)这是我在使用您的 DialogueMode 表格时获得的输出:
pissed:
1: 6
2: 0
rumors:
1: 4
2: 3
general:
1: 1
2: 2
ignore:
1: 7
2: 0
annoyed:
1: 5
2: 0
job:
1: 3
2: 5
uniqueDialogue:
1: 0
2: 3
编辑:不确定你想要什么,但希望这对你有所帮助。
我不确定你具体想要什么,但或许你可以修改以下代码并在此基础上进行。这段代码循环遍历并检查是否能在 DialogueMode 中找到与当前打印的相同的表格。如果表格不同,旁边不会打印“true”。
无论如何,以下是代码,希望对你有所帮助。如果不行,可以随意删除这个答案:
local DialogueMode = {
uniqueDialogue = {0, 3},
general = {1, 2},
job = {3, 5},
rumors = {4, 3},
annoyed = {5, 0},
pissed = {6, 0},
ignore = {7, 0}
}
local function isDialogueModeCompatible(playerTools, npc, dialogueMode)
for v, x in pairs(DialogueMode) do
if (DialogueMode[v] == dialogueMode) then
bool = true;
int = v;
break;
end
end
return(tostring(dialogueMode)..". Match Found: "..tostring(bool));
end
for k,v in pairs(DialogueMode) do
print(k .. ' ' .. tostring(isDialogueModeCompatible(playerTools, npc, v)));
end
- 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 代码?

显然,v 存储了正确的比较。
例如:
for mode, value in pairs(DialogueMode) do print(tostring(value) .. " " .. tostring(DialogueMode.uniqueDialogue) .. " ") end打印:
table: 140b90e8 table: 140b90e8