如何比较数组中的值而不考虑索引顺序
2021-1-20 4:25:58
收藏:0
阅读:142
评论:1
我是 Lua 的新手,喜欢使用数组但并不擅长它。我所拥有的代码是在两个数组之间简单的比较,但我想要做的是在数字和数字1之间比较数组中的任意值。如下所示,在“我的当前代码”中,两侧都应该有来自不同索引的2个数字,我想打印出“2个数字匹配!”等等。
我还想比较一个带有 {1,2,4} 的数组1 和带有 {2,1,4} 的数组2 并打印(“匹配!”)。简单的“==”无法起作用,因为它会比较索引相同的数组1和数组2中每个值。我尝试了谷歌搜索我所有的问题,但没有得到我想要的东西... 抱歉,我不久前才学会了数组
我的当前代码
local number = {5,6,7,8,9,4}
local number1 = {3,2,4,6,1}
if number == number1 then
print(“匹配!”)
else
print(“不匹配”)
end
期望(我想要得到的代码示例)
local array1 = {5,6,7,8,9,4}
local array2 = {3,2,4,6,1}
local array3 = {6,5,8,4,9,7}
if array1 == array2 then
print(“匹配!”)
elseif 数组2 与数组1 相似 x 个项目
print(x ..“匹配!”)-- 这将打印2个或更多匹配项
else
print(“不匹配!”)
end
如果 array3 具有与 array1 的索引顺序无关的相似值,则
print(“匹配!”)
else
print(“不匹配!”)
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 代码?

你可以将数组转换为用 项 => true 表示的 _集合_,并使用集合运算:
local set_mt = {} -- 集合差集 (set1 - set2): function set_mt.__sub (set1, set2) local diff = {} for value, _ in pairs (set1) do if not set2 [value] then diff [value] = true end end return setmetatable (diff, set_mt) end -- 集合交集 (set1 ^ set2): function set_mt.__pow (set1, set2) local intersect = {} for value, _ in pairs (set1) do if set2 [value] then intersect [value] = true end end return setmetatable (intersect, set_mt) --[[ 也可以这样写: return set1 - (set1 - set2) --]] end -- 集合基数 (#set): function set_mt.__len (set) local len = 0 for value, _ in pairs (set) do len = len + 1 end return len end -- 集合相等 (set1 == set2): function set_mt.__eq (set1, set2) return #(set1 - set2) == 0 and #(set2 - set1) == 0 --[[ 也可以这样写: return #set1 == #set2 and #(set1 ^ set2) == #set1 --]] end --[[ 也可以这样写,虽然这不是任务要求: 集合并集,作为 __add, 笛卡尔积,作为 __mul, 子集,作为 __le, 序列化,作为 __tostring, 绝对补集,如果有一个全集,但它会使一切更复杂。 --]] local function toset (array) local set = {} for _, value in ipairs (array) do set [value] = true end return setmetatable (set, set_mt) end -- 测试: local array1 = {5,6,7,8,9,4} local array2 = {3,2,4,6,1} local array3 = {6,5,8,4,9,7} local set1, set2, set3 = toset (array1), toset (array2), toset (array3) local x = #(set2 ^ set1) if set1 == set2 then print 'array1 and array2 matched!' elseif x >= 2 then print ('array2 has ' .. tostring (x) .. ' matches in array1') -- 这将打印出 2 个或更多匹配 else print 'No Match!' end if set3 == set1 then print 'array3 and array1 matched!' else print 'No Match!' end