这就是我想要做的。每次viewDidLoad启动时,都会获得7个随机的非重复数字。我得到它来创建randoms,但我一直在尝试清除NSMutableSet,当它加载以获得一个新的设置,我遇到了麻烦。 NSLog显然没有显示NSMutableSet中的任何内容,但它总是以相同的顺序出现相同的数字?
// Create set
NSMutableSet *mySet = [NSMutableSet setWithCapacity:6];
// Clear set
NSMutableSet *mutableSet = [NSMutableSet setWithSet:mySet];
[mutableSet removeAllObjects];
mySet = mutableSet;
NSLog(@"mutableSet: %@", mutableSet); // Shows nothing
NSLog(@"mySet: %@", mySet); // Shows nothing
// Assign random numbers to the set
while([mySet count]<=6){
int Randnum = arc4random() % 7+1;
[mySet addObject:[NSNumber numberWithInt:Randnum]];
}
NSLog(@"mySet1: %@", mySet); // Always shows 5,1,6,2,7,3,4 ???
答案 0 :(得分:1)
NS(Mutable)Set
是无序集合,它不会保留插入元素的顺序。所以你的输出只显示该集合包含
数字从1到7。
您可以使用不同的选项来获得预期的输出。
改为使用NSMutableOrderedSet
。
使用集合来跟踪已经发生的数字,但存储 数字也在数组中:
NSMutableArray *numbers = [NSMutableArray array];
NSMutableSet *mySet = [NSMutableSet set];
while ([numbers count] < 6) {
NSNumber *randNum = @(arc4random_uniform(7) + 1);
if (![mySet containsObject:randNum]) {
[numbers addObject:randNum];
[mySet addObject:randNum];
}
}
NSLog(@"numbers: %@", numbers);
对于一个小集合(例如7个数字),您只需使用数组:
NSMutableArray *numbers = [NSMutableArray array];
while ([numbers count] < 6) {
NSNumber *randNum = @(arc4random_uniform(7) + 1);
if (![numbers containsObject:randNum]) {
[numbers addObject:randNum];
}
}
NSLog(@"numbers: %@", numbers);