Это достаточный способ перетасовать колоду карт?

Я пытаюсь перетасовать колоду карт в моем приложении, и я использую следующий код. Будет ли это достаточно рандомизировать колоду? Я почти уверен, это просто желание другого мнения. Благодаря!

for (int i = 0; i < 40000; i++) { int randomInt1 = arc4random() % [deck.cards count]; int randomInt2 = arc4random() % [deck.cards count]; [deck.cards exchangeObjectAtIndex:randomInt1 withObjectAtIndex:randomInt2]; 

EDIT: Если кто-то задается вопросом или должен столкнуться с этим в будущем. Это то, к чему я пошел, чтобы перетасовать колоду карт, это реализация алгоритма Фишера-Йейта. Я получил его из поста @MartinR, предложенного ниже, который можно найти здесь: Каков наилучший способ перестановки в NSMutableArray?

 NSUInteger count = [deck.cards count]; for (uint i = 0; i < count; ++i) { // Select a random element between i and end of array to swap with. int nElements = count - i; int n = arc4random_uniform(nElements) + i; [deck.cards exchangeObjectAtIndex:i withObjectAtIndex:n]; } 

Ваш код должен работать неплохо, если [deck.cards count] <40000, но лучше следовать

 for (int i = [deck.cards count] - 1; i > 0 ; i--) { int randomInt1 = arc4random_uniform(i + 1); [deck.cards exchangeObjectAtIndex:randomInt1 withObjectAtIndex:i]; } 

из документов:

arc4random_uniform () возвращает равномерно распределенное случайное число меньше, чем upper_bound. arc4random_uniform () рекомендуется использовать для таких конструкций, как “ arc4random ()% upper_bound '', поскольку он избегает «модульного смещения», когда верхняя граница не равна двум.

Вот алгоритм Fisher-Yates, который был правильно реализован. И да, это будет достаточно рандомизировать ваш массив, я использовал его много раз, и это просто замечательно!

 NSUInteger count = [deck.cards count]; if (count > 0) { for (NSUInteger i = count - 1; i > 0 ; --i) { [deck.cards exchangeObjectAtIndex:i withObjectAtIndex:arc4random_uniform(i + 1)]; } } 
Interesting Posts

iOS динамически создает UILabels

Как изменить цвет фона UIButton, когда он подсвечен?

Уникальные атрибуты Core Data в iOS и Mac OS

Программно добавляя тень к ярлыку UIButton

Захват фронтальной камеры – Phonegap?

Изменить выбранный цвет ярлыка строки в режиме выбора swift 1.2

Ошибка в Xcode – предупреждение: все приложения должны включать в себя архитектуру armv7 (текущий ARCHS = "")

Как настроить уведомление Apple push для распространения

Ячейки скрыты с помощью CollectionView

Восстановление состояния iOS11 CoreBluetooth не работает

Почему эта простая анимация не работает на iOS 7?

Что касается iOS, какова разница в руководстве по программированию параллелизма и руководстве по программированию потоков?

CGRectApplyAffineTransform затем CGAffineTransformInvert не возвращается в исходное положение

Использование разных идентификаторов повторного использования для той же пользовательской ячейки

Подвижности клипов UINavigationController

Давайте будем гением компьютера.