904
|
1
|
|
2 module "set"
|
|
3
|
|
4 function new(list)
|
|
5 local items = {};
|
|
6 local set = { items = items };
|
|
7
|
|
8 function set:add(set, item)
|
|
9 items[item] = true;
|
|
10 end
|
|
11
|
|
12 function set:contains(set, item)
|
|
13 return items[item]
|
|
14 end
|
|
15
|
|
16 function set:items(set)
|
|
17 return items;
|
|
18 end
|
|
19
|
|
20 function set:remove(set, item)
|
|
21 items[item] = nil;
|
|
22 end
|
|
23
|
|
24 function set:add_list(set, list)
|
|
25 for _, item in ipairs(list) do
|
|
26 items[item] = true;
|
|
27 end
|
|
28 end
|
|
29
|
|
30 function set:include(set, otherset)
|
|
31 for item in pairs(otherset) do
|
|
32 items[item] = true;
|
|
33 end
|
|
34 end
|
|
35
|
|
36 function set:exclude(set, otherset)
|
|
37 for item in pairs(otherset) do
|
|
38 items[item] = nil;
|
|
39 end
|
|
40 end
|
|
41
|
|
42 return set;
|
|
43 end
|
|
44
|
|
45 function union(set1, set2)
|
|
46 local set = new();
|
|
47 local items = set.items;
|
|
48
|
|
49 for item in pairs(set1.items) do
|
|
50 items[item] = true;
|
|
51 end
|
|
52
|
|
53 for item in pairs(set2.items) do
|
|
54 items[item] = true;
|
|
55 end
|
|
56
|
|
57 return set;
|
|
58 end
|
|
59
|
|
60 function difference(set1, set2)
|
|
61 local set = new();
|
|
62 local items = set.items;
|
|
63
|
|
64 for item in pairs(set1.items) do
|
|
65 items[item] = true;
|
|
66 end
|
|
67
|
|
68 for item in pairs(set2.items) do
|
|
69 items[item] = nil;
|
|
70 end
|
|
71
|
|
72 return set;
|
|
73 end
|
|
74
|
|
75 return _M;
|