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

即使如此,我再次执行下面的代码,并再次获得相同的输出。 但是,我认为它不应该:

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,唯一设置计数应该再次相同。

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

一个NSArray可以包含多个相等的对象。 一个NSSet不能。 这就是为什么从你的数组创build的集合有更less的对象。

你总是得到317个对象的原因是你使用的是rand()而没有seeding: 为什么我总是用rand() 得到相同的随机数序列?

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

像这样使用

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