网站城市分站是怎么做的,佛山外贸网站建设公司,搜狗网站制作,wordpress主题导购当我们获取 table 长度的时候无论是使用 # 还是 table.getn 其都会在索引中断的地方停止计数#xff0c;而导致无法正确取得 table 的长度#xff0c;而且还会出现奇怪的现象。例如#xff1a;t里面有3个元素#xff0c;但是因为最后一个下表是5和4#xff0c;却表现出不一…当我们获取 table 长度的时候无论是使用 # 还是 table.getn 其都会在索引中断的地方停止计数而导致无法正确取得 table 的长度而且还会出现奇怪的现象。例如t里面有3个元素但是因为最后一个下表是5和4却表现出不一样的长度。 所以通常准确计算table的长度就是通过pairs来遍历ipairs只能针对从数字1开始的连续索引碰到不是数字或者不连续的就停止遍历
local function getTableLength(t)local length0for k,v in pairs(t) dolength length1endreturn length
endlocal function isEqualTable(tab1,tab2)local typer1,typer2 type(tab1),type(tab2)if table~typer1 and table~typer2 then return tab1tab2 endif tabletyper1 and table~typer2 then return false endif table~typer1 and tabletyper2 then return false endif tab1 tab2 then return true endif getTableLength(tab1) ~ getTableLength(tab2) then return false endfor k,v in pairs(tab1) dolocal tmp tab2[k]return isEqualTable(v,tmp)endreturn true
end 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