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 = {}

table.insert(test, {})
table.insert(test, , {}) 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 = {}

table.insert(test, {})
table.insert(test, , {}) 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 position pos, shifting down other elements to close the space, if necessary. Returns the value of the removed element. The default value for pos is n, where n is the length of the table, so that a call table.remove(t) removes the last element of table t.

删除pos位置元素, 并将左边的高index元素向左移动一个位置。  此处所指的高index是指左侧所有的 元素, 故 maxn值会减少1.

local test = {}

table.insert(test, {})
table.insert(test, , {}) print("table.maxn(test)="..table.maxn(test)) for i,v in pairs(test) do
print("i="..i.." v="..tostring(v))
end table.remove(test, ) 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 position pos in table, shifting up other elements to open space, if necessary. The default value for pos is n+1, where n is the length of the table (see §2.5.5), so that a call table.insert(t,x) inserts x at the end of table t.

将元素value插到pos位置, 此位置以及以上的元素都向右边移动一位。 会将maxn值加1.

local test = {}

table.insert(test, {})
table.insert(test, , {}) print("table.maxn(test)="..table.maxn(test)) for i,v in pairs(test) do
print("i="..i.." v="..tostring(v))
end table.insert(test, , ) 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 = {}

table.insert(test, {})
table.insert(test, , {}) print("table.maxn(test)="..table.maxn(test)) for i,v in pairs(test) do
print("i="..i.." v="..tostring(v))
end test[] = 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

lua table integer index 特性的更多相关文章

  1. Lua table使用

    days = {"Sunday", "Monday", "Tuesday", "Wednesday", "Th ...

  2. 【游戏开发】在Lua中实现面向对象特性——模拟类、继承、多态

    一.简介 Lua是一门非常强大.非常灵活的脚本语言,自它从发明以来,无数的游戏使用了Lua作为开发语言.但是作为一款脚本语言,Lua也有着自己的不足,那就是它本身并没有提供面向对象的特性,而游戏开发是 ...

  3. 9.6 翻译系列:数据注解之Index特性【EF 6 Code-First系列】

    原文链接:https://www.entityframeworktutorial.net/entityframework6/index-attribute-in-code-first.aspx EF ...

  4. 【转载】【游戏开发】在Lua中实现面向对象特性——模拟类、继承、多态

    [游戏开发]在Lua中实现面向对象特性——模拟类.继承.多态   阅读目录 一.简介 二.前提知识 三.Lua中实现类.继承.多态 四.总结 回到顶部 一.简介 Lua是一门非常强大.非常灵活的脚本语 ...

  5. 树形打印lua table表

    为方便调试lua程序,往往想以树的形式打印出一个table,以观其表内数据.以下罗列了三种种关于树形打印lua table的方法;法一 local print = print local tconca ...

  6. lua table 排序--满足多条件排序

    前提 假设 一个小怪 有三种属性,等级(level).品质(quality).id(pid) 我们需要对他们进行排序,两种排序情况,第一是单一属性排序,比如按照等级进行排序,或者多种属性进行优先级排序 ...

  7. cocos2d-x lua table数据存储

    cocos2d-x lua table数据存储 version: cocos2d-x 3.6 1. 将table转为json http://blog.csdn.net/songcf_faith/art ...

  8. cocos2d-x lua table与json的转换

    cocos2d-x lua table与json的转换 version: cocos2d-x 3.6 1.引入json库 require("src/cocos/cocos2d/json&qu ...

  9. lua table表

    lua table表 语法结构 创建一个 table 直接使用 "{}" 即可 table1 = {} -- 赋值 table1["name"] = " ...

随机推荐

  1. ajax传递array参数

    var ticketId = new Array(); for(var i = 0; i < checkboxes.length; i++) { ticketId.push(checkboxes ...

  2. 最短路径—Dijkstra算法和Floyd算法

    原文链接:http://www.cnblogs.com/biyeymyhjob/archive/2012/07/31/2615833.html 最后边附有我根据文中Dijkstra算法的描述使用jav ...

  3. mysql数据库引擎

    看某个使用的引擎,在显示结果里参数engine后面的就表示该表当前用的存储引擎:mysql> show create table 表名; 看mysql支持哪些存储引擎:mysql> sho ...

  4. Codeforces 307 div2 E.GukiZ and GukiZiana 分块

    time limit per test 10 seconds memory limit per test 256 megabytes input standard input output stand ...

  5. 一些SQL

    复制当前所有,ID自动增长.       insert into test(name,pass) select name,pass from test 删除当前重复      delete A fro ...

  6. Android自动化测试-自动获取cpu和内存信息

    CpuInfo.java package com.dtest; import java.io.BufferedReader; import java.io.FileWriter; import jav ...

  7. ACM:SCU 4437 Carries - 水题

    SCU 4437  Carries Time Limit:0MS     Memory Limit:0KB     64bit IO Format:%lld & %llu  Practice  ...

  8. 洛谷 P2725 邮票 Stamps Label:DP

    题目背景 给一组 N 枚邮票的面值集合(如,{1 分,3 分})和一个上限 K —— 表示信封上能够贴 K 张邮票.计算从 1 到 M 的最大连续可贴出的邮资. 题目描述 例如,假设有 1 分和 3 ...

  9. bzoj4196 [Noi2015]软件包管理器 树链剖分+线段树

    先把树剖分了(又是dfs1.dfs2),然后区间求和.区间覆盖即可 难得的1A好(shui)题 ——写了那么多题,终于有一道是1A的了,加上上一次连续交了几遍A的程序,我的状态莫名好看啊233 总结: ...

  10. linux系统ftp命令

    先来一段简单的ftp 下载脚本 ftp -i -n<<EOF open 14.2.33.211 user etl etl cd /etlfile/ftpfile lcd /etlfile/ ...