当前位置: 代码迷 >> 综合 >> cocos2d-x lua 封装增删改查时间复杂度为O(1)的集合
  详细解决方案

cocos2d-x lua 封装增删改查时间复杂度为O(1)的集合

热度:43   发布时间:2023-11-18 01:16:08.0
--创建增删改查复杂度都为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