lua中判断2个表是否相等

当我们获取 table 长度的时候无论是使用 **#**还是 table.getn其都会在索引中断的地方停止计数,而导致无法正确取得 table 的长度,而且还会出现奇怪的现象。例如:t里面有3个元素,但是因为最后一个下表是5和4,却表现出不一样的长度。

所以通常准确计算table的长度就是通过pairs来遍历(ipairs只能针对从数字1开始的连续索引,碰到不是数字或者不连续的就停止遍历

Lua 复制代码
local function getTableLength(t)
    local length=0
    for k,v in pairs(t) do
        length = length+1
    end
    return length
end

local function isEqualTable(tab1,tab2)
    local typer1,typer2 = type(tab1),type(tab2)
    if "table"~=typer1 and "table"~=typer2 then return tab1==tab2 end
    if "table"==typer1 and "table"~=typer2 then return false end
    if "table"~=typer1 and "table"==typer2 then return false end
    if tab1 == tab2 then return true end
    if getTableLength(tab1) ~= getTableLength(tab2) then return false end
    for k,v in pairs(tab1) do
        local tmp = tab2[k]
        return isEqualTable(v,tmp)
    end
    return true
end
Lua 复制代码
local t1 = {a = 1, b = 2}
local t2 = {b = 2, a = 1}

local t3 = {a = 1, b = 2, c = 3}

local t7={"a","b",c={{a = 1, b = 2}}}
local t8={"a","b",c={{b = 2, a = 1}}}

print(isEqualTable(t1, t2)) -- 输出: true
print(isEqualTable(t1, t3)) -- 输出: false
print(isEqualTable(t7, t8)) -- 输出: true
相关推荐
暮冬-  Gentle°21 分钟前
C++中的命令模式实战
开发语言·c++·算法
Volunteer Technology3 小时前
架构面试题(一)
开发语言·架构·php
清水白石0083 小时前
Python 对象序列化深度解析:pickle、JSON 与自定义协议的取舍之道
开发语言·python·json
2401_876907523 小时前
Python机器学习实践指南
开发语言·python·机器学习
努力中的编程者4 小时前
栈和队列(C语言底层实现环形队列)
c语言·开发语言
码不停蹄Zzz4 小时前
C语言——神奇的static
java·c语言·开发语言
CoderCodingNo5 小时前
【GESP】C++七级考试大纲知识点梳理, (1) 数学库常用函数
开发语言·c++
老鱼说AI5 小时前
CUDA架构与高性能程序设计:异构数据并行计算
开发语言·c++·人工智能·算法·架构·cuda
上海合宙LuatOS6 小时前
LuatOS核心库API——【sys】LuatOS运行框架
运维·服务器·物联网·硬件工程·lua·软件工程·信息与通信
子超兄6 小时前
线程池相关问题
java·开发语言