为什么Rand()总是生成具有固定唯一组计数的随机数?

时间:2013-11-20 13:06:44

标签: ios objective-c performance random nsarray

即使我再次执行以下代码&我再次得到相同的输出。但是,我认为不应该:

int ObjectCount =500;
NSMutableArray *mut_arr = [[NSMutableArray alloc]initWithCapacity:0];
for (int i = 0; i<ObjectCount ; i++)
{    
 [mut_arr addObject:[NSNumber numberWithInt: rand()%ObjectCount]];
}
NSSet* uniqueSet = [NSSet setWithArray:mut_arr];    
NSLog(@"Array of %d objects generates %d Unique Objects",[mut_arr count],[uniqueSet count]);

输出如下:

500个对象的数组生成317个唯一对象

这里,由于数组包含随机数,因此唯一的集合数应该相同。再次使用相同的ObjectCount。

2 个答案:

答案 0 :(得分:3)

您实际上并没有生成唯一的NSNumber个对象;其中一些是平等的。

NSArray可以包含多个相等的对象。 NSSet不能。这就是为什么从数组创建的集合具有较少的对象。

你总是得到317个对象的原因是你在没有播种的情况下使用rand()Why do I always get the same sequence of random numbers with rand()?

请考虑使用arc4random(),而不是自动播种。

答案 1 :(得分:1)

像这样使用

[mut_arr addObject:[NSNumber numberWithInt:(arc4random() % (ObjectCount-1) + 1)]];