我需要生成唯一的數字,我可以想到連續的方法,例如,我可以有一個從0開始的計數器,每次需要唯一的數字時我返回計數器並將計數器增加1,這樣做很簡單直到我可能有很多獨特的數字超出了數據類型的範圍(比如說int),同樣,生成的唯一數字,例如,計數器是10,但是4和5不再被使用,因此它們可以是重用,如何在不保留數據結構的情況下使用可重用的數字?iOS:使用現有號碼生成唯一連續號碼的最佳方式是可移除的嗎?
謝謝!
我需要生成唯一的數字,我可以想到連續的方法,例如,我可以有一個從0開始的計數器,每次需要唯一的數字時我返回計數器並將計數器增加1,這樣做很簡單直到我可能有很多獨特的數字超出了數據類型的範圍(比如說int),同樣,生成的唯一數字,例如,計數器是10,但是4和5不再被使用,因此它們可以是重用,如何在不保留數據結構的情況下使用可重用的數字?iOS:使用現有號碼生成唯一連續號碼的最佳方式是可移除的嗎?
謝謝!
你能替代你已經發放的號碼嗎?如果是這樣,那麼只要返回任何數字,替換最近分發的一個,並遞減分配計數器。如果它是最近被返回的那個,則跳過替換。
否則,我想你能做的最好的事情是保持一個有序的數組範圍。
分配一個新的號碼:
如果數組爲空,創建一個新的範圍和在其返回的唯一的號碼。
否則,獲取數組中的第一個範圍並將其長度增加1.返回該數字。檢查是否使前兩個範圍加入。如果是這樣,然後將它們合併成一個範圍。
要返回一個數字:
搜尋落入範圍內(例如,通過二進制搜索,看看NSOrderedSet
如果你的部署計劃允許的話)。如果返回的數字在範圍的任一端,那麼只需縮小範圍。否則將一個分成兩個,返回的數字作爲洞。