2012-07-20 158 views
0

我有50個數組元素的NSMutableArray。我需要隨機生成而沒有任何重複。你能建議一些示例代碼嗎?不重複的隨機數

+0

應該是什麼類型的元素之前只檢查? NSNumber,int,NSString? – 2012-07-20 12:03:31

回答

0

這裏是樣品獲得隨機INT低於1000

int y = arc4random() % 1000; 

留不重複,插入

+2

最好使用'arc4random_uniform(1000)'或其他數字,不存在模塊偏差。 – zaph 2014-10-06 01:51:15

0

我假設你想要生成數字。這是我用於從N生成M個隨機數的答案,雖然它不會將它們添加到NSMutableArray中,但我相信您可以根據需要修改此代碼。

#define M 10 
#define N 100  

unsigned char is_used[N] = { 0 }; /* flags */ 
int in, im; 

im = 0; 

for (in = N - M; in < N && im < M; ++in) { 
    int r = rand() % (in + 1); /* generate a random number 'r' */ 

    if (is_used[r]) 
    /* we already have 'r' */ 
    r = in; /* use 'in' instead of the generated number */ 

    assert(!is_used[r]); 
    vektor[im++] = r + 1; /* +1 since your range begins from 1 */ 
    is_used[r] = 1; 
} 

assert(im == M); 

爲什麼上面的作品並不是很明顯。但它的工作。從[1..N]範圍精確選擇M個數字將以均勻分佈進行選取。

請注意,對於較大的N,您可以使用基於搜索的結構來存儲「已經使用」的數字,從而得到一個O(M)內存需求的O(M log M)算法。

[Source]

1

創建主陣列的本地副本mutablearray,並獲得隨機值之後,在隨機指標自本地數組中刪除可用對象,過程它,直到數組數爲1