Я пытаюсь перетасовать колоду карт в своем приложении и использую следующий код. Будет ли это достаточно рандомизировать колоду? Я почти уверен, что это просто хочет другое мнение. Спасибо!
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];
РЕДАКТИРОВАТЬ: В случае, если кто-то задается вопросом или столкнется с этим в будущем. Это то, что я использовал, чтобы перетасовать свою колоду карт, это реализация алгоритма Фишера-Йейтса. Я получил это из сообщения @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]
в переменной перед циклом, поэтому вам не нужно вызывать этот метод 80 000 раз. 2) Используйтеarc4random_uniform(count)
вместоarc4random
с модулем. - person rmaddy   schedule 30.04.2014[deck.cards count]
следует хранить в переменной перед циклом, а затем в цикле следует использовать переменную. Это экономит 80 000 вызовов методов. - person rmaddy   schedule 30.04.2014[deck.card count]
итераций справится с задачей идеально. - person Rob   schedule 30.04.2014