如何比较数字数组并确保没有一个值相同



我使用

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个。

相关内容

  • 没有找到相关文章

最新更新