lua 集合操作

local Set = {}
local mt = {}
function Set.new(t)
  local set = {}
  setmetatable(set, mt)
  for k,v in pairs(t) do
    set[v] = true
  end
  return set
end

function Set.union(a,b)
  local set = Set.new{}
  for k in pairs(a) do
    set[k] = true
  end
  for k in pairs(b) do
    set[k] = true
  end
  return set
end

function Set.tostring(set)
 local l = {}
 for e in pairs(set) do
 l[#l+1] = e
 end
 return "{"..table.concat(l,",").."}"
end

function Set.print(s)
 print(Set.tostring(s))
end
 
function Set.intersection(a,b)
  local set = Set.new{}
  for k in pairs(a) do
    if b[k] then
      set[k] = true
    end
  end
  return set
end

function Set.complementary(a,b)
  local set = Set.new{}
  for k in pairs(a) do
    if not b[k] then
      set[k] = true
    end
  end
  return set
end

mt.__add = Set.union
mt.__mul = Set.intersection 
mt.__sub = Set.complementary

local a = Set.new{2,3,4,5}
local b = Set.new{1,6,3}

local s = a - b

Set.print(s)

local s = a + b

Set.print(s)

local s = a * b

Set.print(s)

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值