lua 二维数组检查值是否存在
2016-11-12 11:30:26
收藏:0
阅读:198
评论:1
我真的很需要帮助。 我仍然无法理解我的逻辑lua代码关于如何使用if条件来阻止事件,当它已经有一个值时?
这是我的二维数组:
mydata = {
{"mike", "30", "1"},
{"michael", "40", "2"},
{"mike", "40", "2"},
{"michael", "50", "3"},
{"frost", "50", "3"},
{"nick", "60", "4"}
}
实际上,我的计划是获取正确的代码来检查索引名称 mydata [..] [1] 和点索引 mydata [..] [3]。
这是一个示例案例说明:
如果索引名称 Michael 和点索引 3 不存在 或者 如果只有名称 michael 存在 但是 它没有点指标3,然后它将在 data.txt中写入michael:50:3。但是如果名称和点指数已经存在。那么,它将阻塞并输出(“抱歉,您的名称和分数指数已经存在”)
我的代码:
mydata = {{"mike", "30", "1"},
{"michael", "40", "2"},
{"mike", "40", "2"},
{"michael", "50", "3"},
{"frost", "50", "3"},
{"nick", "60", "4"}}
function check_point1(tab, val1) -- 用于检查名称的函数
for index, value in ipairs (tab) do
if value[1] == val1 then
return true
end
end
return false
end
function check_point2(tab, val1) -- 用于检查名称后的玩家点数的函数
for index, value in ipairs (tab) do
if value[3] == val1 then
return true
end
end
return false
end
--这是示例情况
--以下是处理检查是否存在的变量
name = "michael"
id = "3"
--这是我的检查代码,我不知道它好不好。或者它是错误的代码。因为它不起作用
if check_point1(mydata, name) then
if check_point2(mydata, id) then
print(“your name and point index are exist. sorry you can't earn this point”)
else
print(“only your name exist. let us save your new point now”)
end
else
print(“your name and point index is not exist. let us save your name and point now”)
local file = io.open(“data.txt”,“r”)
file:写(“michael:50:3”)
file:关闭()
end
阻止事件“write michael:50:3”的最佳方法是什么? 让我知道如果你在帮助我之前需要理解某些事情。我仍然不擅长Lua。
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- 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 代码?

我们可以将其拆分为一个广义的比较函数,该函数在一组记录中搜索与提供的记录(部分或全部)匹配的存储记录。
第一个函数我们需要定义一个辅助函数
contains_all,该函数接受一个target记录和一个query记录,并测试target是否至少包含query中所有内容。local function contains_all (target, query) for key, value in pairs(query) do if target[key] ~= value then return false end end return true end然后我们可以轻松实现我们的搜索函数,该函数在记录的 集合 中搜索,并针对相同的查询记录检查每个记录。我们称此函数为
find_by,因为如果找到匹配的记录,则返回该记录及其找到的索引。local function find_by (set, query) for i = 1, #set do if contains_all(set[i], query) then return set[i], i end end end现在,我们可以使用这些函数来查找
mydata是否包含与我们选择的query记录匹配或部分匹配的记录。local mydata = { {"mike", "30", "1" }, { "michael", "40", "2" }, { "mike", "40", "2" }, { "michael", "50", "3" }, { "frost", "50", "3" }, { "nick", "60", "4" } } print(find_by(mydata, { [1] = "michael", [3] = "3" })) --> table: 0x217d890 4由于我们存储的记录是序列,因此我们使用显式的方括号表示法来设置我们的索引,在这种情况下跳过第二个索引。
由于此函数在匹配时返回一个表,并在没有匹配时返回
nil,因此我们现在有了一个安全的布尔对比; 表是一个真值,而nil是一个假值。if find_by(mydata, { [1] = "michael", [3] = "3" }) then print('Entry exists') end返回记录使我们更容易进行进一步的检查,而无需再次查询每个记录。
local found = find_by(mydata, { "michael" }) if found then if found[3] == "3" then print('Entry exists.') else print('Only name exists.') end else print('Entry does not exist') end