lua自学笔记3 table(1)

//11 关联数组
(1)
a = {}  --创建一个table,并将它的引用存储到a
k = "x"
a[k] = 10 --新条目,key="x"/k,value=10
print(a["x"])  ---10
print(a[k])  ----10
a[k] = a[k] + 1 
print(a[k])  ----递增条目"x"
//a["x"] 等同于 a.x 但是a[k]不等同于a.k 

(2)打印table所有行
for i=1, #a do  //#a返回table表中从key等于1开始往下数到某个a[i]为nil不管a[i+1]有没有值只返回i-1
print(a[i])
end
//#a不管table表中的空隙,但table.maxn会顾及table的空隙,但不论是#a还是table.maxn都不计算a[0]在内
a[0] = 10   ---->#a和table.maxn(a)都等于0
a[1] = 10   ---->#a=1,table.maxn(a)=1
a[3] = 10   ---->#a=1,table.maxn(a)=3

(3)table构造式
//构造一个不为空的table
days = {"Sunday","Monday","Tuesday","Wenesday","Thursday","Friday","Saturday"}
a = {x=10,y=20} 等价于 a={};a.x=10;a.y=20;
print(days[1]) --->Sunday//没有days[0]的值
{x=0,y=0}等价于{["x"]=0,["y"]=0}
{"r","g","b"}等价于{[1] = "r",[2]="g",[3]="b"}

(4)打印数组所有值
for i,v in ipairs(a) do print(v) end//泛型for循环
//i为索引值、v为索引索引的数组元素值

(5)用table造数组
a={} --新建一个数组
for i = 1,5 do ---i最好从1开始,这样一些功能才能方便使用
a[i] = 0     ---给数组中的每个地方赋初值
end
#a  ---计算数组a的长度

(6)用table造矩阵或者说是二维数组
mt = {} ---创建一个矩阵
for i = 1,N do
mt[i] = {} ---创建一个新行
for j = 1,M do
mt[i][j] = 0 
end
end

(7) 链表
---创建链表
for line in io.lines() do
list = {next=list,value=line}
end
---遍历链表
local l = list
while l do
print(l.value)
l = l.next
end

(8)table的几个方法
table.insert(t,i,v)
//将值v插入到t的i位置

table.remove(t,i)
//将table中位置i的元素去掉

table.concat(table,sep,start.end)
//列出参数table的数组部分,从start位置到end位置的所有元素,元素间以指定的所有分隔符sep隔开,除table外其他条件都不是必须的
//分隔符默认是空字符,start默认值为1,end的默认值是数组部分的总长

table.maxn(table)
//此函数返回指定table中所有正数key值中最大的key值,如果不存在的key值为正数的元素,则返回0
//且不局限于整数

table.sort(table,comp)
//对给定的table的value默认进行升序排序
//若需要降序排列可以这样写
sortFunc = function(a,b) return b < a end
table.sort(table,sortFunc)
print(table.concat(table,","))

table.foreachi(table,function(i,v))
//遍历table中的key和value逐对进行function(i,v)操作,只遍历从1开始的连续整数范围

table.foreach(table,function(i,v))
//功能与foreachi差不多,不过它是对整个表进行迭代

(9)队列(标准队列是尾插头删,先进后出;双向列队头尾都可插,头尾都可删)
//下面是同table做的队列,注意区分list[first]和list["first"]
//队列的初始化
function List.new()
return{first = 0,last = -1}
end

//从头插入
function List.pushfirst(list,value)
local first = list.first - 1
list.first = first
list[first] = value
end

//从尾插入
function List.pushlast(list,value)
local last = list.last + 1 
list.last = last
list[last] = value
end

//从头删除
function List.popfirst(list)
local first = list.first
if first > list.last then error("list is empty") end
local value = list[first]
list[first] = nil   ---为了允许垃圾收集
list.first = first + 1 
return value
end

//从尾删除
function List.poplast(list)
local last = list.last
if first > list.last then error("list is empty") end
local value = list[last]
list[last] = nil    ---为了允许垃圾收集
list.last = last - 1
return last
end

猜你喜欢

转载自blog.csdn.net/lvyan1994/article/details/53021410
今日推荐