1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
|
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) |
运行结果:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
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 |