1

我正在使用随机生成 6 个数字

self.number1 = [[NSNumber alloc] initWithInt:((arc4random() % 
                (hightestNumber-lowestNumber+1)) + lowestNumber)];

我对所有六个数字都这样做,但有些数字是一样的。我可以使用什么代码来确保没有任何两个或多个数字是相同的值。我打算使用 if 语句将该数字与所有六个数字进行比较,然后再次调用 arc4random 代码,但它有可能再次出现与另一个数字相同的值,之后我必须再次对其进行测试。我真的被这个难住了。谢谢您的帮助。

4

2 回答 2

4

我可以使用什么代码来确保没有任何两个或多个数字是相同的值。

一个集合没有重复的值,因此一种选择是将数字添加到集合中,直到集合的大小达到您想要的对象数量(在您的情况下为 6 个)。

NSMutableSet *set = [NSMutableSet set];
while ([set count] < 6) {
    [set addObject:@((arc4random() % (hightestNumber-lowestNumber+1)) + lowestNumber)];
}

另一种选择是从现有列表中选择号码,删除您选择的每个号码:

NSArray *list = @[@5, @6, @7, @8, @9, @10, @11, @12, @13];
NSMutableArray *sourceList = [list mutableCopy];
NSMutableArray *finalList = [NSMutableArray array];
for (int i = 0; i < 6; i++) {
    // (omitting code to choose a random index for brevity)
    [finalList addObject:[sourceList objectAtIndex:randomIndex]];
    [sourceList removeObjectAtIndex:randomIndex];
}

如果您从中选择的列表包含连续(或至少单调递增)的数字,则此方法可以很好地工作,因为这样可以很容易地保证源列表中的值是唯一的。

于 2013-12-17T18:12:15.300 回答
2

除了 Caleb 的出色建议之外,如果范围相对较小,您可以创建一个包含所有枚举值的数组,将它们打乱,然后选择前 6 个。

于 2013-12-17T18:38:42.040 回答