arc4random()
не является повторяющимся генератором, то есть каждый вызов не зависит от всех других вызовов.Но это также означает, что простой вызов arc4random()
(в общем случае) не даст 50 уникальных чисел.
Один из способов - создать массив целых чисел, который вам нужен, а затем пройтись по массиву и поменять местами одно с другимвыбран случайным образом (в вашем случае) с помощью (arc4random ()% 50).Они просто используют последовательные значения из массива, а когда в конце создают новый массив и рандомизируют его.
Пример: значения в списке будут случайными числами от 0 до 49 без повторов:
int n = 50;
int list[n];
for (int i = 0; i<n; i++)
list[i] = i;
for (int i = n-1; i>=1; i--) {
int ran = arc4random() % (i+1);
int tmp = list[i];
list[i] = list[ran];
list[ran] = tmp;
}
for (int i = 0; i<n; i++)
NSLog(@"%d", list[i]);
Это современная версия шаффла Фишера-Йейтса, разработанная для использования на компьютере и представленная Ричардом Дюрстенфельдом.
Примечание: использование мода для создания подмножества создает смещение, но в случае 50смещение незначительно.