Si tiene NSMutableArray
, ¿cómo baraja los elementos aleatoriamente?¿Cuál es la mejor manera de barajar un NSMutableArray?
(tengo mi propia respuesta para esto, lo que se publica a continuación, pero soy nuevo en cacao y estoy interesado en saber si hay una manera mejor.)
Actualización: Como señalado por @Mukesh, a partir de iOS 10+ y macOS 10.12+, existe un método -[NSMutableArray shuffledArray]
que se puede usar para mezclar. Ver https://developer.apple.com/documentation/foundation/nsarray/1640855-shuffledarray?language=objc para más detalles. (Pero tenga en cuenta que esto crea una nueva matriz, en lugar de mezclar los elementos en su lugar.)
Aquí está una implementación en Swift: http://iosdevelopertips.com/swift-code/swift-shuffle-array-type.html –
Eche un vistazo a esta pregunta: [Problemas del mundo real con barajado ingenuo] (http://stackoverflow.com/questions/96840/real-world-problems-with-naive-shuffling) con respecto a su algoritmo de mezcla. – craigb
Lo mejor actual es [Fisher-Yates] (https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle): 'para (NSUInteger i = self.count; i> 1; i--) [self exchangeObjectAtIndex: i - 1 withObjectAtIndex: arc4random_uniform ((u_int32_t) i)]; ' –