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

 更新时间:2015年07月09日 10:36:27   投稿:junjie  
这篇文章主要介绍了Lua编程示例(三):稀疏表、双端队列、格式化输出、表和循环表的格式化输出,本文直接给出实例代码,代码中包含详细注释,需要的朋友可以参考下
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], "\tcircle\n")
 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和C++的通信流程分解

    Lua和C++的通信流程分解

    这篇文章主要介绍了Lua和C++的通信流程分解,本文用一张图讲解了Lua和C++之间的通信流程,并对每一步做了分解,需要的朋友可以参考下
    2014-09-09
  • Lua教程(二十):Lua调用C函数

    Lua教程(二十):Lua调用C函数

    这篇文章主要介绍了Lua教程(二十):Lua调用C函数,本文讲解了C函数作为应用程序的一部分、C函数库成为Lua的模块等内容,需要的朋友可以参考下
    2015-04-04
  • C++中调用Lua函数实例

    C++中调用Lua函数实例

    这篇文章主要介绍了C++中调用Lua函数实例,本文给出了Lua和C++的代码,并对步骤做了讲解,需要的朋友可以参考下
    2014-09-09
  • Lua中的元方法__newindex详解

    Lua中的元方法__newindex详解

    这篇文章主要介绍了Lua中的元方法__newindex详解,本文讲解了查询与更新、监控赋值、通过table给另一个table赋值等内容,需要的朋友可以参考下
    2014-09-09
  • Lua中的函数(function)、可变参数、局部函数、尾递归优化等实例讲解

    Lua中的函数(function)、可变参数、局部函数、尾递归优化等实例讲解

    这篇文章主要介绍了Lua中的函数(function)、可变参数、局部函数、尾递归优化等实例讲解,需要的朋友可以参考下
    2014-09-09
  • 使用Lua编写Nginx服务器的认证模块的方法

    使用Lua编写Nginx服务器的认证模块的方法

    这篇文章主要介绍了使用Lua编写Nginx服务器的认证模块的方法,即诸如当今流行的社交应用接入等功能,需要的朋友可以参考下
    2015-06-06
  • Lua中os库详细介绍

    Lua中os库详细介绍

    这篇文章主要介绍了Lua中os库详细介绍,本文详细讲解了OS库中的常用方法,分别对参数做出了解释,有的给出了示例,需要的朋友可以参考下
    2014-11-11
  • Lua中的函数写法简明示例

    Lua中的函数写法简明示例

    这篇文章主要介绍了Lua中的函数写法简明示例,本文是一篇个人学习笔记,简单的记录了Lua函数的写法,需要的朋友可以参考下
    2015-04-04
  • Lua中全局变量与非全局环境介绍

    Lua中全局变量与非全局环境介绍

    这篇文章主要介绍了Lua中全局变量与非全局环境介绍,本文讲解了全局变量的原形、非全局的环境、改变函数的全局变量环境、使用__index元方法保留原来的_G,需要的朋友可以参考下
    2014-09-09
  • Lua学习笔记之函数、变长参数、closure(闭包)、select等

    Lua学习笔记之函数、变长参数、closure(闭包)、select等

    这篇文章主要介绍了Lua学习笔记之函数、变长参数、closure(闭包)、select等,本文着重讲解了这些特性的用法,并给出代码实例,需要的朋友可以参考下
    2015-04-04

最新评论