NSMutableArray存储int而不重复

时间:2014-02-09 12:43:17

标签: ios objective-c xcode nsmutablearray arc4random

我正在尝试在Xcode 5中创建一个NSMutableArray,我随机生成1到12之间的数字并将它们存储为整数。问题是有时会产生两次相同的数字,这是不可取的。

//Load array
NSMutableArray *theSequence = [[NSMutableArray alloc] init];

//Generate the Sequence
for (NSInteger i=0; i < difficultyLevel; i++) {
    int r = arc4random()%12 + 1;

    //Check here if duplicate exists
    [theSequence addObject:[NSNumber numberWithInteger:r]];
}

其中difficultyLevel当前为4,因为应该存储4个整数。

我在Stack Overflow上尝试了其他答案但没有成功,是否有人能够在[theSequence addObject:..]之前定制某种循环,这样当我在标签中显示数字时它们是唯一的?提前谢谢!

哈利

1 个答案:

答案 0 :(得分:2)

由于int s的顺序无关紧要(无论如何都是随机的),用NSMutableSet替换NSMutableArray容器可以避免重复。您现在需要做的就是检查容器的大小,并在达到所需的四个大小时停止:

NSMutableSet *theSequence = [NSMutableSet set];

do {
    int r = arc4random()%12 + 1;
    [theSequence addObject:[NSNumber numberWithInteger:r]];
} while (theSequence.count != difficultyLevel);

注意:如果由于某种原因,插入顺序很重要,您可以使用NSMutableOrderedSet