AgentE382

Class-Based Set Module

Jun 18th, 2019
127
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 1.35 KB | None | 0 0
  1. local set = {}
  2.  
  3. --create a nil set;
  4. function set.create()
  5.     return setmetatable({}, set)
  6. end
  7.  
  8. --insert a x value in set s;
  9. function set:insert(x)
  10.     self[x] = true
  11. end
  12.  
  13. --remove a x value of set s;
  14. function set:remove(x)
  15.     self[x] = nil
  16. end
  17.  
  18. --create and return a complement set
  19. function set:complement(s2)
  20.     local s3 = set.create()
  21.     for k in pairs(s2) do
  22.         if not self:isIn(k) then
  23.             s3:insert(k)
  24.         end
  25.     end
  26.     return s3
  27. end
  28.  
  29. --create and return the unite two sets
  30. function set:union(s2)
  31.     local s3 = set.create()
  32.     for k in pairs(self) do
  33.         s3:insert(k)
  34.     end
  35.     for k in pairs(s2) do
  36.         s3:insert(k)
  37.     end
  38.     return s3
  39. end
  40.  
  41. --create and return the intersection of two sets
  42. function set:intersection(s2)
  43.     local s3 = set.create()
  44.     for k in pairs(self) do
  45.         if s2:isIn(k) then
  46.             s3:insert(k)
  47.         end
  48.     end
  49.     return s3
  50. end
  51.  
  52. --return true if the set s is nil
  53. function set:isEmpty()
  54.     local count = 0
  55.     for k in pairs(self) do
  56.         count = count + 1
  57.     end
  58.     return count == 0
  59. end
  60.  
  61. --return true if x is in set s
  62. function set:isIn(self, x)
  63.     return self[x]
  64. end
  65.  
  66. --return true if s2 is contained in s1
  67. function set:isSubset(s2)
  68.     for k in pairs(s2) do
  69.         if not self:isIn(k) then
  70.             return false
  71.         end
  72.     end
  73.     return true
  74. end
  75.  
  76. --return true if s1 is contained in s2
  77. function set:isSuperset(s2)
  78.     return s2:isSubset(self)
  79. end
  80.  
  81. return set
Add Comment
Please, Sign In to add comment