无法清除/重置NSMutableSet?

时间:2014-09-12 18:53:15

标签: xcode random nsmutableset

这就是我想要做的。每次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 ???

1 个答案:

答案 0 :(得分:1)

NS(Mutable)Set无序集合,它不会保留插入元素的顺序。所以你的输出只显示该集合包含 数字从1到7。

您可以使用不同的选项来获得预期的输出。

  1. 改为使用NSMutableOrderedSet

  2. 使用集合来跟踪已经发生的数字,但存储 数字也在数组中:

    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);
    
  3. 对于一个小集合(例如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);
    
相关问题