加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Lua table

发布时间:2020-12-14 22:06:39 所属栏目:大数据 来源:网络整理
导读:Lua的table提供了Map的功能,实现了"关联数组",并且整数、字符串甚至nil都可以作为索引/key;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可以提取key1.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,c)

5????????6????????7

?

> functionsum(a,c)

>> return a +b + c

>> end

> =sum(unpack(t))

18

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读