不重复的随机数

问题描述:

我有50个数组元素的NSMutableArray。我需要随机生成而没有任何重复。你能建议一些示例代码吗?不重复的随机数

+0

应该是什么类型的元素之前只检查? NSNumber,int,NSString? – 2012-07-20 12:03:31

这里是样品获得随机INT低于1000

int y = arc4random() % 1000; 

留不重复,插入

+2

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

我假设你想要生成数字。这是我用于从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]

创建主阵列的本地副本mutablearray,并获得随机值之后,在随机指标自本地数组中删除可用对象,过程它,直到数组数为1