lua - 如何比较不同的数组
2021-3-9 16:58:59
收藏:0
阅读:313
评论:3
我想要比较2个数组,但不知道该怎么做。
以如下为例:
local array1 = { 'friend', 'work', 'privat' }
local array2 = { 'apple', 'juice', 'privat' }
如果两个数组的值相同则应该打印出来。
我知道需要使用以下代码:
for x in ipairs(array1) do
if x == array2 then
print ("Hi")
end
end
但是当然它不起作用。 那么该如何检查array1的值是否包含从array2中获取的值呢?
点赞
用户3150484
如何检查数组1的值是否包含来自数组2的值?
@luther的答案并不总是适用于你的问题。
如果这些数组的大小不同,它就完全失败了。
如果你有一个数组,其中相似的元素不在完全相同的索引中,它可能会返回错误的负数。
例如,a = {'one', 'two'}; b = {'two', 'one'}会返回false。
使用table.sort解决这个问题只是一个应急措施,而没有解决实际问题。
下面的函数可以处理包含任意顺序的元素的不同大小的数组:
function array_compare(a, b)
for ia, va in ipairs(a) do
for ib, vb in ipairs(b) do
if va == vb then
print("matching:",va)
end
end
end
end
在array_compare函数中,我们会遍历a和b表中的所有元素组合,比较它们,如果相等,则打印出来。
ipairs(table)使用index, value(而不仅仅是value)。
例如,
local array1 = { 'friend', 'work', 'privat' }
local array2 = { 'apple', 'juice', 'privat' }
array_compare(array1, array2)
会打印出
matching: privat
2021-03-10 18:27:35
用户3574628
如果你想查看array1是否包含任何与array2中相同的值,你可以进行以下操作:
- 将
array1转换为一个set集合。这个set集合是一个新的表格,其中数组的值变为键,其值为true。 - 遍历
array2,查看其中任何一个值是否为集合中的键。
local set = {}
for _, v in ipairs(array1) do
set[v] = true
end
for _, v in ipairs(array2) do
if set[v] then
print'Hi'
-- 如果你只想打印一次"Hi",可以使用break语句。
end
end
如果数组很大,这个算法应该比一个嵌套循环更快,后者需要比较array1中的每个值和array2中的每个值。
2021-03-10 20:46:26
评论区的留言会收到邮件通知哦~
推荐文章
- 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 代码?

想象一下:你必须检查第一个数组中的每个元素与第二个数组中的相应元素。如果任何一个元素不相等,你就会知道这两个数组不相等。如果每个元素都检查通过,那么这两个数组相等。
local function arrayEqual(a1, a2) -- 检查长度,否则循环无效。 if #a1 ~= #a2 then return false end -- 检查每个元素。 for i, v in ipairs(a1) do if v ~= a2[i] then return false end end -- 检查完毕。 return true end