我的NSMutableArray 50的数组元素。 我需要没有任何重复的随机生成。 您能否提供一些示例代码。
Answer 1:
这里是样品获得随机INT低于1000。
int y = arc4random() % 1000;
留不重复,在插入之前只检查
Answer 2:
创建主阵列的本地副本mutablearray,并获得随机值之后,在随机指标自本地阵列,直到数组数为1除去可用对象,对其进行处理。
Answer 3:
我假设你想生成号码。 这是我用来从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)内存要求。
[资源]
文章来源: Random number without repeating