我使用
self.number1 = [[NSNumber alloc] initWithInt:((arc4random() %
(hightestNumber-lowestNumber+1)) + lowestNumber)];
我对所有六个数字都这样做,但有些数字是相同的。我可以使用什么代码来确保不是任何两个或多个数字是相同的值。我打算使用 if 语句将该数字与所有六个数字进行比较,然后再次调用 arc4random 代码,但它有可能再次出现与另一个数字相同的值,之后我必须再次测试它。我真的被这个难住了。谢谢你的帮助。
我可以使用什么代码来确保不是任何两个或多个数字是相同的值。
集合没有重复值,因此一种选择是将数字添加到集合中,直到集合的大小达到所需的对象数(在本例中为 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];
}
如果要从中选择的列表包含连续(或至少单调递增)的数字,则此方法可以很好地工作,因为这可以轻松保证源列表中的值是唯一的。
除了Caleb的出色建议之外,如果范围相对较小,您可以创建一个包含所有枚举值的数组,打乱它们,然后选择前6个。