为什么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)]];