即使我再次执行以下代码&我再次得到相同的输出。但是,我认为不应该:
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。
答案 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)]];