Как сравнить массив чисел и убедиться, что ни одно из значений не совпадает?

Я случайно генерирую 6 номеров, используя

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

Я делаю это для всех шести чисел, но некоторые числа получаются одинаковыми. Какой код я могу использовать, чтобы убедиться, что не любые два или более числа имеют одинаковое значение. Я собирался использовать оператор if, чтобы сравнить число со всеми шестью числами, а затем снова вызвать код arc4random, но есть вероятность, что он снова получит то же значение другого числа, и после этого мне придется проверить его снова. Я действительно озадачен этим. Спасибо за помощь.

2 ответа

Решение

Какой код я могу использовать, чтобы убедиться, что не любые два или более числа имеют одинаковое значение.

Набор не имеет повторяющихся значений, поэтому одним из вариантов является добавление чисел к набору до тех пор, пока размер набора не достигнет желаемого количества объектов (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];
}

Этот метод может хорошо работать, если выбранный вами список содержит последовательные (или, по крайней мере, монотонно увеличивающиеся) числа, поскольку это позволяет легко гарантировать, что значения в исходном списке являются уникальными.

В дополнение к отличным предложениям Калеба, если диапазон относительно мал, вы можете создать массив со всеми перечисленными значениями, перемешать их, а затем выбрать первые 6.

Другие вопросы по тегам