1 function PrintTable(tb)
2 for k,v in pairs(tb) do
3 print(v)
4 end
5 print("-------------------")
6 end
7
8 function PrintTable2(tb)
9 for i,v in ipairs(tb) do
10 print(v)
11 end
12 print("-------------------")
13 end
14
15 --------------------------------------------------------------A:删除
16 --1.删除数组(从后往前删除)
17 local a = {1,2,3,4,5,6}
18 local a2 = {1,2,3,4,5,6}
19
20 --方法1(牺牲时间):
21 --在数组数量大且满足条件的元素多时不宜使用,因为会移动大量元素
22 for i=#a,1,-1 do
23 if (a[i] % 2 == 0) then
24 table.remove(a, i)
25 end
26 end
27 PrintTable(a)--1,3,5
28
29 --方法2(牺牲空间):
30 local a3 = {}
31 for i=1,#a2 do
32 if (a2[i] % 2 ~= 0) then
33 table.insert(a3, a2[i])
34 end
35 end
36 PrintTable(a3)--1,3,5
37
38 --2.删除字典(置空)
39 local b = {["a"]=1,2,3,[20]="b",4,5,6}
40
41 for k,v in pairs(b) do
42 if ((k == "a") or (type(v) == "number" and v % 2 == 0)) then
43 b[k] = nil
44 end
45 end
46 PrintTable(b)--3,5,b
47
48 --------------------------------------------------------------B:排序
49 --因为是排序,所以table必定是数组形式
50 --table.sort(table, function),原理是冒泡算法,相邻元素两两比较
51 --function返回true则表示排在前面
52
53 local c = {4,3,5,1,2}
54 table.sort(c)--从小到大排序
55 PrintTable2(c)--1,2,3,4,5
56 table.sort(c, function(a,b) return a > b end)--从大到小排序
57 PrintTable2(c)--5,4,3,2,1
58
59 local c2 = {
60 {id=9, name="e"},
61 {id=2, name="c"},
62 {id=8, name="a"},
63 {id=1, name="b"},
64 {id=5, name="d"},
65 }
66 table.sort(c2, function(a,b) return a.id < b.id end)
67 for i,v in ipairs(c2) do
68 print(v.name)
69 end
70 print("-------------------")--输出:b,c,d,a,e
71
72 --多字段排序(先处理优先级低的)
73 --优先级:1.等级由高到低 2.id由高到低
74 local c3 = {
75 {id=1, level=7},
76 {id=2, level=6},
77 {id=3, level=8},
78 {id=4, level=8},
79 }
80 table.sort(c3, function(a,b)
81 if (a.level == b.level) then
82 return a.id > b.id
83 else
84 return a.level > b.level
85 end
86 end)
87 for i,v in ipairs(c3) do
88 print(v.id)
89 end
90 print("-------------------")--输出:4,3,1,2