随机数不重复

时间:2012-07-20 11:53:05

标签: iphone nsmutablearray xcode4.2

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

3 个答案:

答案 0 :(得分:1)

创建主数组的本地mutablearray副本,并在获取随机值后,从本地数组中删除随机索引处可用的对象,处理它直到数组计数为1.

答案 1 :(得分: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]

答案 2 :(得分:0)

这里是获得小于1000的随机int的示例。

int y =  arc4random() % 1000;

保持不重复,只需在插入之前检查