0

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

4

3 回答 3

1

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

于 2012-07-20T12:05:38.747 回答
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) 算法。

[来源]

于 2012-07-20T12:04:12.310 回答
0

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

int y =  arc4random() % 1000;

保持没有重复,只需在插入前检查

于 2012-07-20T12:05:39.420 回答