lua table integer index 特性
table.maxn (table)
Returns the largest positive numerical index of the given table, or zero if the table has no positive numerical indices. (To do its job this function does a linear traversal of the whole table.)
返回表中最大的正数值index。
说明:
1、 此接口不是统计表中元素的数目。
2、 如果表中 positive numerical index 不是连续的, 12 4, 缺少3为index的元素, 计算值为 maxn为 4。
local test = {1} table.insert(test, {}) table.insert(test, 4, {}) print("table.maxn(test)="..table.maxn(test)) for i,v in pairs(test) do print("i="..i.." v="..tostring(v)) end
LOG:
>lua -e "io.stdout:setvbuf 'no'" "luatest.lua"
table.maxn(test)=4
i=1 v=1
i=2 v=table: 00559670
i=4 v=table: 005597B0
FOR IPAIRS vs Non Positive Integer Index
对于不连续的 positive integer index情况, 如果使用 ipairs 迭代器, 只能获取第一个连续的index段。
故不能遍历所有元素, 如果需要则使用 pairs迭代器。
local test = {1} table.insert(test, {}) table.insert(test, 4, {}) print("table.maxn(test)="..table.maxn(test)) for i,v in ipairs(test) do print("i="..i.." v="..tostring(v)) end
LOG:
>lua -e "io.stdout:setvbuf 'no'" "luatest.lua"
table.maxn(test)=4
i=1 v=1
i=2 v=table: 00339580
table.remove (table [, pos])
Removes from
table
the element at positionpos
, shifting down other elements to close the space, if necessary. Returns the value of the removed element. The default value forpos
isn
, wheren
is the length of the table, so that a calltable.remove(t)
removes the last element of tablet
.
删除pos位置元素, 并将左边的高index元素向左移动一个位置。 此处所指的高index是指左侧所有的 元素, 故 maxn值会减少1.
local test = {1} table.insert(test, {}) table.insert(test, 4, {}) print("table.maxn(test)="..table.maxn(test)) for i,v in pairs(test) do print("i="..i.." v="..tostring(v)) end table.remove(test, 1) print("table.maxn(test)="..table.maxn(test)) for i,v in pairs(test) do print("i="..i.." v="..tostring(v)) end
LOG:
>lua -e "io.stdout:setvbuf 'no'" "luatest.lua"
table.maxn(test)=4
i=1 v=1
i=2 v=table: 00589350
i=4 v=table: 005892B0
table.maxn(test)=3
i=1 v=table: 00589350
i=3 v=table: 005892B0
>Exit code: 0
table.insert (table, [pos,] value)
Inserts element
value
at positionpos
intable
, shifting up other elements to open space, if necessary. The default value forpos
isn+1
, wheren
is the length of the table (see §2.5.5), so that a calltable.insert(t,x)
insertsx
at the end of tablet
.
将元素value插到pos位置, 此位置以及以上的元素都向右边移动一位。 会将maxn值加1.
local test = {1} table.insert(test, {}) table.insert(test, 4, {}) print("table.maxn(test)="..table.maxn(test)) for i,v in pairs(test) do print("i="..i.." v="..tostring(v)) end table.insert(test, 1, 33) print("table.maxn(test)="..table.maxn(test)) for i,v in pairs(test) do print("i="..i.." v="..tostring(v)) end
LOG:
>lua -e "io.stdout:setvbuf 'no'" "luatest.lua"
table.maxn(test)=4
i=1 v=1
i=2 v=table: 00979800
i=4 v=table: 009795F8
table.maxn(test)=5
i=1 v=33
i=2 v=1
i=3 v=table: 00979800
i=5 v=table: 009795F8
>Exit code: 0
table.remove vs nil set
nil 不会做 将右边的元素向左移动一位的动作, remove会。
local test = {1} table.insert(test, {}) table.insert(test, 4, {}) print("table.maxn(test)="..table.maxn(test)) for i,v in pairs(test) do print("i="..i.." v="..tostring(v)) end test[1] = nil print("table.maxn(test)="..table.maxn(test)) for i,v in pairs(test) do print("i="..i.." v="..tostring(v)) end
LOG:
>lua -e "io.stdout:setvbuf 'no'" "luatest.lua"
table.maxn(test)=4
i=1 v=1
i=2 v=table: 003D9508
i=4 v=table: 003D9580
table.maxn(test)=4
i=2 v=table: 003D9508
i=4 v=table: 003D9580
>Exit code: 0
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
· .NET 适配 HarmonyOS 进展
· 本地部署 DeepSeek:小白也能轻松搞定!
· 如何给本地部署的DeepSeek投喂数据,让他更懂你
· 从 Windows Forms 到微服务的经验教训
· 李飞飞的50美金比肩DeepSeek把CEO忽悠瘸了,倒霉的却是程序员
· 超详细,DeepSeek 接入PyCharm实现AI编程!(支持本地部署DeepSeek及官方Dee