Lua-table

作者: 叫我颜先生 | 来源:发表于2018-10-26 18:42 被阅读0次

简介

table库中函数针对的几乎都是数组类型的

实例

  • table.getn()

    -- #表长
    -- table.getn() #table 索引1开始 正序连续 
    -- 1.不连续              print:3 3
    mytable={[1]="a",[2]="b",[3]="c",[5]="e"}
    mytable={[1]="a",[2]="b",[3]="c",[4]=nil,[5]="e"}
    -- 2.第一个索引不是1      print:2 0
    mytable={[-1]="a",[0]="b",[1]="c",[2]="e"}
    mytable={[-1]="a",[0]="b",[2]="c",[3]="e"}
    -- 3.倒序               print:1
    mytable={[1]="a",[0]="b",[-1]="c",[-2]="e"}
    
    function table_leng(t)
      local leng=0
      for k, v in pairs(t) do
        leng=leng+1
      end
      return leng;
    end
    
  • table.maxn()

    获取数组最大下标(数组不连续时很好用)

    若都是负数索引或者非数字索引,返回0

    -- print:length=2 maxn=5
    t={"a","b",[5]="e"}
    print("length="..#t)
    print("maxn="..table.maxn(t))
    
  • table.insert(table,[pos,]value)

    不是数组类型table时使用小心,获取的length会有问题

  • table.remove(table[,pos])

    删除表元素,表长度改变

    array = {"a","a","a","b","a","a","b"}
    for i,v in ipairs(array) do
        if v == "a" then
            table.remove(array, i)
        end
    end
    for i,v in ipairs(array) do
        print(i,v)
    end
    -- 并没有删除掉所有的a,原因是每一次删除完一个元素之后,array已经没有了那个值,再次遍历时的i其实已经是新array的i了
    --[[ print:
    1a
    2b
    3a
    4b
    ]]
    
    -- 所以这样删除 从后往前删除
    array = {"a","a","a","b","a","a","b"}
    for i=#array,1,-1 do
        if array[i] == "a" then
            table.remove(array, i)
        end
    end
    for i,v in ipairs(array) do
        print(i,v)
    end
    -- print:1b 2b
    
    -- 1.table.remove(table,pos) 返回值为对应pos的值 pos为空时删除最后一个元素 删除结束移动元素位置
    -- print:1a 2c 3d 1a 2c 3d 3 b
    mytable={"a","b","c","d"}
    n=table.remove(mytable,2)
    for k,v in pairs(mytable) do
      print(k..v);
    end
    for k,v in ipairs(mytable) do
      print(k..v);
    end
    print(#mytable)
    print(n)
    -- 2.nil 直接元素置空 不会移动位置 表中会有个空洞 #或者table.getn()获取长度不行
    -- print:1a 3c 4d 1a 4 nil
    mytable={"a","b","c","d"}
    mytable[2]=nil
    for k,v in pairs(mytable) do
      print(k..v);
    end
    for k,v in ipairs(mytable) do
      print(k..v);
    end
    print(#mytable)
    print(mytable[2])
    
  • table.sort(table[,comp])

    排序,可以自定义排序规则

    array = {"egg","dophin","ai","con","body"}
    -- print:egg dophin ai con body
    
    table.sort(array)
    -- print:ai body con dophin egg
    
    table.sort(array,function(e1,e2)
      return string.len(e1)<string.len(e2)
    end)
    -- print:ai con egg body dophin
    
  • table.concat(…)

    以特定形式连接表中数据,只处理table中下标是数字,从1开始,连续不断开的数据

    t={a=1,8,"name",[9]="id","age","time"}
    for k,v in pairs(t) do
      print(v)
    end
    -- print:8  name  age  time  1  id
    
    a=table.concat(t)
    print(a)
    -- print:8nameagetime
    -- 只处理数字下标 下标从一开始 断开就结束
    
    a=table.concat(t,"-")
    print(a)
    -- print:8-name-age-time
    -- 第二个参数为连接字符串,默认连接字符串是空串
    
    a=table.concat(t,"-",2)
    print(a)
    -- print:name-age-time
    -- 第三个参数为起始位置
    
    a=table.concat(t,"-",2,3)
    print(a)
    -- print:name-age
    -- 第四个参数为结束位置
    
    a=table.concat(t,"-",2,5)
    print(a)
    -- error
    -- 真正符合连接的数据只有4个 报错
    
    t={[1]="a",[2]="b",[3]="c"}
    a=table.concat(t)
    print(a)
    -- print:abc
    
    t={[2]="b",[3]="c"}
    a=table.concat(t)
    print(a)
    -- print:     (空串)
    

参考

https://www.jianshu.com/nb/4814025

相关文章

  • Lua-table

    简介 table库中函数针对的几乎都是数组类型的 实例 table.getn()-- #表长-- table.ge...

  • Lua-Table

    给Table赋值在table中直接赋值 给一个新的键值,给新的键赋值 第三种方法通过table . 的方式 lua...

网友评论

      本文标题:Lua-table

      本文链接:https://www.haomeiwen.com/subject/jdpltqtx.html