房卡棋牌,生成唯一的房間ID,算法

RoomManager.lua
local idMgr = require('id_mgr')
function CMD.PlayerCreateRoom(roomData)
    local startTime = os.time()

    for i = 1,999999 do
        idMgr:gen_id()
    end
    
    local endTime = os.time()
    local totalTime = endTime - startTime
    print('totalTime:"..totalTime)
    print("id len:"..idMgr:getTblLen)

end

id_mgr.lua
function id_mgr:init()
    self.tbl = {}
end

function id_mgr:gen_id()
    if self.id_mgr == nil then
        slef:init()
    end

    local bExit = true
    local result = 0
    while(bExit) do
        result = math.random(1,999999) % 9999 + (math.random(1,999999) % 88 + 10) * 10000
        bExit = self:isExist(result)
        if result = 0 then
            bExit = true
        end
    end
    table.insert(self.tbl,result)
end

funtion id_mgr:isExist(id)
    for i = 1, #self.tbl, 1 do
        if self.tbl[i] == id then
            return true
        end
    end
    return false
end

用lua實現取六位房間號ID算法

核心思想是保證生成出來的ID與現有ID不重複

從開始寫此文章,到寫完,算法還在執行 總共執行 999999 次。

所以此算法的弊端是,房間號生成的越多,越慢。

於是,把999999 改爲 9999 總用時 1s,並沒有細算到ms,如果ms應該在1s內

1s也可接受,畢竟要同時達到一萬房間存在的話,地方棋牌也不容易!

99999 花費時間爲 161s

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章