• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Lua中的table浅析

    Lua的table提供了Map的功能,实现了"关联数组",并且整数、字符串甚至nil都可以作为索引/key;table没有固定的大小。
     
    基于table,可以表示普通数组、符号表、集合、记录、队列和其他数据结构。
     
    而Lua也是通过table来解决模块(module)、包(package)和对象(Object)的。
    例如io.read表示使用"read"来索引table io。
     
    在Lua中,table既不是值也不是"变量",而是对象,可以类比Java中的数组。
     
    table是通过构造表达式的,最简单的就是{}

    复制代码 代码如下:

    > a={}
    > a['name'] = 'wyj'
    > =a.name
    wyj
     
    table永远是匿名的,一个持有table的变量与table自身没有固定的关联性:
    复制代码 代码如下:

    > b = a
    > b.name = 'ljq'
    > =a.name
    ljq
    > b = nil
    > =a.name
    ljq
     
    b['name']和b.name等价,而对于数字只能使用b['3']的形式,同Javascript。
     
    同其他对象一样,当没有table的引用时,Lua的垃圾回收器最终回收table。
     
    其实Lua将全局变量存储在一个table中。
     
    table的长度可以通过#获取(#还可以获取字符串的长度)
    复制代码 代码如下:

    > table = {}
    > for i = 1,10 do
    >> table[i] = i
    >> end
    > =#table
    10

    但不是所有情况都适用
    复制代码 代码如下:

    > table = {}
    > table[3] = 3
    > table.name = 'wyj'
    > =#table
    0
     
    实际上,在第一次碰到nil时,就认为是结束标志
    复制代码 代码如下:

    > table = {}
    > table[10] = 10
    > =#table
    0
    > table[1] = 1
    > =#table
    1

    这一点,不同于Javascript的数组长度的行为。

    上面提到构造表达式{},介绍一下复杂一点的构造表达式:

    复制代码 代码如下:

    a = {'wyj', 'lmy'}
    a= {x = 10, y = 20,l='s'}

    但是下面的方式不正确
    复制代码 代码如下:

    > a={1=3}
    stdin:1: '}'expected near '='
    > a={'x'=3}
    stdin:1: '}'expected near '='

    而应该这样使用:
    复制代码 代码如下:

    > x = {[1] = 3,['name'] = 'www'}
    > =x[1]
    3
    > =x.name
    www

     
    table还可以嵌套
    复制代码 代码如下:

    > a = {x = {y =1}}
    > =a.x.y
    1

    更复杂的方式,可以调用函数初始化
    > x ={math.sin(3)}
    > =x[1]
    0.14112000805987
     
    另外需要特别注意的是,无label的项会自动生成整数的label
    复制代码 代码如下:

    > x = {1, 2, [2]=3, 4,5}
    > =x[1]
    1
    > =x[2]
    2
    > =x[3]
    4

    所以,显式的label为整数的情况下要特别小心。
     
    另外支持用;替换,
    复制代码 代码如下:

    >x={x=1;y=2; 'one', 'two'}
    > xx
    1
    > =x[1]
    one

    unpack

    NoteGem Horizontal Line
    内置函数unpack可以提取key为1.2.3...的元素

    复制代码 代码如下:

    > t = {x=3,y=4,5,6,7}
    > unpack(t)
    > =unpack(t)
    5        6        7
    > a,b,c = unpack(t) --Lua支持多重赋值
    > print(a,b,c)
    5        6        7
     
    > functionsum(a,b,c)
    >> return a +b + c
    >> end
    > =sum(unpack(t))
    18

    您可能感兴趣的文章:
    • Lua的table库函数insert、remove、concat、sort详细介绍
    • Lua中table的几种构造方式详解
    • Lua中对table排序实例
    • Lua中遍历数组和table的4种方法
    • Lua中的table学习笔记
    • Lua中使用table.concat连接大量字符串实例
    • Lua判断Table是否为空的方法(空的table即{})
    • Lua中使用table实现的其它5种数据结构
    • 获取Lua表结构(table)数据实例
    • 深入谈谈lua中神奇的table
    上一篇:Lua中字符串(string)浅析
    下一篇:Lua中的函数(function)、可变参数、局部函数、尾递归优化等实例讲解
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    Lua中的table浅析 Lua,中的,table,浅析,Lua,中的,