寫了個生成UID的演算法

2021-06-10 07:26:03 字數 2935 閱讀 4012

function new_index_manager()

local res = }

local public = {}

function public.take_away_index()

local t = res[1]

if table.getn(t) >= 1 then

local ret = t[1]

t[1] = t[1] + 1

if t[1] > t[2] then

res[1] = res[ table.getn( res ) ]

res[ table.getn( res ) ] = nil

endreturn ret

endreturn nil

endfunction public.take_back_index( _index )

local t =

res[ table.getn( res ) + 1] = t

if table.getn( res ) > 50 then

public.tidy()

endend

function public.tidy()

local reflash = true

--有新合併發生則繼續進行合併檢測

while reflash do

reflash = false

--進行合併

local len = table.getn( res )

for i=1, len do

for j=i+1, len do

if table.getn(res[i]) > 1 and table.getn(res[j]) > 1 then

local be_mixed = true

--判斷交集情況

if res[i][2]+1 < res[j][1] or res[j][2]+1 < res[i][1] then

be_mixed = false

end--合併

if be_mixed then

local t = {}

if res[i][1] < res[j][1] then

t[1] = res[i][1]

else

t[1] = res[j][1]

endif res[i][2] > res[j][2] then

t[2] = res[i][2]

else

t[2] = res[j][2]

endres[i] = t

res[j] = {}

reflash = true

endend

endend

--重新整理資料

local t = {}

local len = table.getn( res )

for i=1, len do

if table.getn(res[i]) > 1 then

t[ table.getn(t) + 1 ] = res[i]

endend

res = t

endend

function public.show()

local len = table.getn( res )

for i=1, len do

print(res[i][1], res[i][2])

endend

return public

endlocal index_manager = new_index_manager()

local t_record = {}

for i=1, 1000 do

local r = math.random(1,10)

if r < 6 then

t_record[ table.getn(t_record) + 1 ] = index_manager.take_away_index()

else

if table.getn(t_record) > 1 then

index_manager.take_back_index(t_record[1])

t_record[1] = t_record[ table.getn(t_record) ]

t_record[ table.getn(t_record) ] = nil

endend

endindex_manager.show()

print("---------")

index_manager.show()

>lua -e "io.stdout:setvbuf 'no'" "123.lua"

471 99999999

1 451

454 456

458 462

464 464

---------

471 99999999

1 451

454 456

458 462

464 464

>exit code: 0

#includeusing namespace std;

class uid_factory

long create_uid()

return ret;

} return 0;

} bool create_need_uid(long _uid)

if( _uid < e)

return true;}}

} return false;

} void delete_uid(long _uid)

res.push_back( make_pair(_uid, _uid) );

if( res.size() > 50 )

tidy_res();

} void tidy_res()

;

寫了乙個wwwscan的路徑生成工具

drupal 6.22 htaccess drupal 6.22 changelog.txt drupal 6.22 cron.php drupal 6.22 index.php drupal 6.22 install.mysql.txt drupal 6.22 install.pgsql.txt ...

寫了個UIButton的分類

個人寫 有整理強迫症,不喜歡uibutton每次都需要重新寫個函式,就寫了個分類 一些有重複呼叫必要的函式還是不要用此分類的好 inte ce uibutton block handlecontrolevent withblock 使用block處理button事件 入參 event 觸發型別 例 ...

寫了個NSObject的擴充套件類

乙個object的分類,可以在呼叫performselector 函式的時候不限制傳參的數量 bool需要封裝一層 為了讓performselector 後面帶入的引數可識別,很有必要將bool封裝一層,用於在後面解析函式時候的識別 inte ce boolclass nsobject proper...