从 luasocket 里面翻出来的有用代码。
set, not-sorted.
-----------------------------------------------------------------------------
-- Simple set data structure. O(1) everything.
-----------------------------------------------------------------------------
local function newset()
local reverse = {}
local set = {}
return setmetatable(set, {__index = {
insert = function(set, value)
if not reverse[value] then
table.insert(set, value)
reverse[value] = table.getn(set)
end
end,
remove = function(set, value)
local index = reverse[value]
if index then
reverse[value] = nil
local top = table.remove(set)
if top ~= value then
reverse[top] = index
set[index] = top
end
end
end
}})
end
-----------------------------------------------------------------------------
local n = newset()
n:insert("hello")
n:insert("good")
n:remove("hello")
for _, v in ipairs(n) do
print(v)
end
-----------------------------------------------------------------------------
insert/remove 的时候,不需要关心 key 是啥。
评论