Iphone 不重复的随机数

Iphone 不重复的随机数,iphone,nsmutablearray,xcode4.2,Iphone,Nsmutablearray,Xcode4.2,我有50个数组元素的NSMutableArray。我需要随机生成没有任何重复。你能推荐一些示例代码吗。我假设你想生成数字。这是我用来从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 &

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

我假设你想生成数字。这是我用来从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);
#定义M 10
#定义N 100
使用了无符号字符[N]={0};/*旗帜*/
int-in,im;
im=0;
对于(in=N-M;in
上述措施奏效的原因目前尚不明显。但它是有效的。从[1..N]范围内精确选取M个数字,并均匀分布

注意,对于大N,您可以使用基于搜索的结构来存储“已使用”的数字,从而获得一个具有O(M)内存需求的好的O(M log M)算法


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

下面是获取小于1000的随机整数的示例

int y =  arc4random() % 1000;

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

元素应为什么类型?NSNumber、int、NSString?最好使用
arc4random\u uniform(1000)
或任何数字,没有模偏差。