--创建增删改查复杂度都为O(1)的table
--利用了一个额外的数组reverse,来保存数组s中每个数据在s中的位置,相当于以空间换时间
--@ 这里删除还可以优化,table.remove实现过于复杂,希望可以只删除table中最后一个(已实现)
function table.dictionarySet()local reverse = { }local set = { }return setmetatable(set, {__index ={insert = function(set, value)if not reverse[value.User.UserInfo.UserID] thentable.insert(set, value)reverse[value.User.UserInfo.UserID] = table.getn(set)endend,remove = function(set, value)local index = reverse[value]if index thenreverse[value] = nilset[index] = {} --这样删除的时间复杂度也是O(1)
-- table.remove(set,index)
-- for k,v in pairs(reverse) do
-- if v > index then
-- reverse[k] = v - 1
-- end
-- endendend,find = function(set, value)local index = reverse[value]return(set[index] and set[index] or false)end,keyFind = function(set, value)local index = reverse[value]return (index and index or false)end,}} )
end
方式就是已空间换取时间,table中保存2份table,增删查,还可以根据key找value,也可以根据value找key