A5下载 - 努力做内容最丰富最安全的下载站!

A5站长下载站

当前位置:A5下载 > 源码技巧 > 父类数据 > Lua编程示例(三):稀疏表、双端队列、格式化输出、表和循环表的格式化输出

Lua编程示例(三):稀疏表、双端队列、格式化输出、表和循环表的格式化输出

时间:2015-07-09 15:25作者:zhao人气:76

a={}

for i=1,10 do

a[i]={}

for j=0,10 do

if(i%2==0) then

a[i][j]=0

end

end

end

print(a[9][10])

print(a[10][10])

print()

--双端队列

List={}

function List.new()

return {first = 0,last = -1}

end

function List.pushleft(list,value)

local first= list.first-1

list[first] = value

list.first= first

end

function List.pushright(list,value)

local last = list.last+1

list[last]= value

list.last=last

end

function List.popleft(list)

local first=list.first

if(first>list.last) then

error("list is empty")

end

local res= list[first]

list[first]=nil

list.first=list.first+1

return res

end

function List.popright(list)

local last = list.last

if last<first then

error("the list is empty")

end

local res = list[last]

list[last]= nil

list.last= list.last-1

return res

end

function List.display(list)

if(list.first>list.last) then

error("the list is empty",2)

end

for i=list.first ,list.last do

print(list[i])

end

end

mylist=List.new()

List.pushleft(mylist,12)

List.pushleft(mylist,"00")

List.pushright(mylist,34)

List.pushright(mylist,56)

List.display(mylist)

print()

function newStack ()

return {""}

end

function serialize(o)

if type(o) == "number" then

io.write(o)

elseif type(o) == "string" then

--不要手动加入引号,否则会有边际效应

io.write(string.format("%q",o))

elseif type(o) == "table" then

io.write("{n")

for i,v in pairs(o) do

io.write(" "..i.." = ")

serialize(v)

io.write(",n")

end

io.write("}n")

end

end

serialize(123)

print()

serialize("112233")

print()

tab = { a=11,haha="www" ,c=333}

serialize(tab)

function basicSerialize (o)

if type(o) == "number" then

return tostring(o)

else

return string.format("%q", o)

end

end

function save (name, value, saved)

saved = saved or {} -- 参数未传入的初始化

io.write(name, " = ")

if type(value) == "number" or type(value) == "string" then

io.write(basicSerialize(value), "n")

elseif type(value) == "table" then

if saved[value] then

io.write(saved[value], "tcirclen")

else

saved[value] = name

io.write("{}n")

for k,v in pairs(value) do

local fieldname = string.format("%s[%s]", name,

basicSerialize(k))

save(fieldname, v, saved)

end

end

else

error("cannot save a " .. type(value))

end

end

a = {x=1, y=2; {3,4,5}}

a[2] = a -- 循环表

a.z = a[1] -- 共享子表

save('a',a)

运行结果:

nil

0

00

12

34

56

123

"112233"

{

a = 11,

c = 333,

haha = "www",

}

a = {}

a[1] = {}

a[1][1] = 3

a[1][2] = 4

a[1][3] = 5

a[2] = a circle

a["y"] = 2

a["x"] = 1

a["z"] = a[1] circle

标签Lua,编程,示例,稀疏,双端,队列,格式化,输出,循环,f

相关下载

查看所有评论+

网友评论

网友
您的评论需要经过审核才能显示

公众号