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

  • 相关阅读:
    Git最佳实践
    Git学习笔记
    Error creating bean with name 'enableRedisKeyspaceNotificationsInitializer' defined in class path resource
    Python实现按着文件资源管理器里的顺序获取文件列表
    python excel接口自动化测试框架
    java进行屏幕截图
    Java启动桌面应用程序
    java自建一个获取当前电脑桌面的鼠标信息
    vue收集表单数据给后端交互
    vue路由懒加载(延迟加载)的写法..
  • 原文地址:https://www.cnblogs.com/lightsong/p/5874032.html
Copyright © 2020-2023  润新知