[Lua]table(二):删除与排序

 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
原文地址:https://www.cnblogs.com/lyh916/p/8284605.html