不重复的随机数
答
这里是样品获得随机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)算法。
答
创建主阵列的本地副本mutablearray,并获得随机值之后,在随机指标自本地数组中删除可用对象,过程它,直到数组数为1
应该是什么类型的元素之前只检查? NSNumber,int,NSString? – 2012-07-20 12:03:31