¿Los algoritmos de clasificación utilizados por los diversos métodos de clasificación en NSArray stable? (Al igual que en los algoritmos de "clasificación estable", donde los elementos con la misma clave de ordenación conservan sus órdenes relativas)¿Los algoritmos de clasificación utilizados por NSArray son estables?
Respuesta
En el doc, no se proporcionan detalles sobre el orden final de los artículos idénticos.
Por lo tanto, creo que hacer alguna suposición sobre el orden sería una mala idea. Incluso si determina de manera experimental qué es el pedido, esto podría cambiar en función del número de elementos del conjunto o de qué versión de iOS ejecute el género.
Para mí, me quedaría con las promesas proporcionadas por la documentación.
No me gustaría confiar en que, incluso si lo hubiera probado a fondo, Apple podría cambiar los algoritmos utilizados en la próxima versión, haciendo que las pruebas resulten inútiles y podría ocasionar algunos errores extraños. – JustSid
La documentación * no * especifica, simplemente está oculta detrás de la documentación de 'NSSortOptions': https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Miscellaneous/Foundation_Constants/Reference/reference. html # // apple_ref/doc/c_ref/NSSortOptions – wxactly
La única respuesta "oficial" que he encontrado sobre este es un 2002 mailing list post por Chris Kane de Apple:
La estabilidad de los métodos de clasificación NSArray/de NSMutableArray no está definido, por lo que deben anticipar que son inestable. Al estar indefinido, la situación también puede cambiar de una versión a otra, aunque no lo hago (yo) anticipo que esto sea probable. La implementación actual utiliza la ordenación rápida, una versión del algoritmo casi idéntica a la rutina qsort() de BSD. Un montón de experimentación encontró en un punto que fue difícil de hacer mejor que la de los tipos generales de datos que hasta en las pruebas. [Por supuesto, si uno tiene información adicional acerca que los datos sean ordenados, se pueden utilizar otros algoritmos o modificaciones que ayudan a ese caso.]
No sé si esto es cierto, dada la edad la publicación es, pero probablemente sea mejor suponer que NSArray
métodos de clasificación son no estable.
No se garantiza la clasificación estable a menos que use NSSortStable
. Desde el documentation on NSSortOptions:
NSSortStable
Especifica que los resultados ordenados debe devolver en comparación artículos tienen igual valor en el orden en que se produjeron originalmente.
Si esta opción no se especifica, los objetos iguales pueden o no ser devueltos en su orden original.
Si necesita garantizar una especie estable, intente algo como:
[array sortWithOptions:NSSortStable usingComparator:^NSComparisonResult(id obj1, id obj2) {
return [obj1 compare:obj2];
}];
'(void) sortWithOptions: usingComparator:' funciona para matrices mutables ... también hay '(NSArray *) sortedArrayWithOptions: usingComparator:' si eso hace flotar su embarcación – wxactly
- 1. OrderBy y OrderByDescending son estables?
- 2. Algoritmos de clasificación/relevancia de búsqueda
- 3. ¿Cómo una red de clasificación vence a los algoritmos de clasificación genéricos?
- 4. Recursos para principiantes/introducciones a los algoritmos de clasificación
- 5. ¿Qué tan estables son las máquinas ec2?
- 6. Paquetes de clasificación ordinal y algoritmos
- 7. Algoritmos de clasificación rápida para matrices con elementos mayormente duplicados?
- 8. ¿Cuáles son las diferencias reales entre los algoritmos genéticos y los algoritmos evolutivos?
- 9. ¿Qué diferentes algoritmos de clasificación están disponibles en Java 6?
- 10. ¿Qué algoritmos son difíciles de implementar en los lenguajes funcionales?
- 11. Cuáles son algunas aplicaciones prácticas de XOR en los algoritmos
- 12. ¿Cómo liberar los recursos utilizados por HttpPostedFileBase?
- 13. Cambiar el orden de clasificación de - [NSArray sortedArrayUsingComparator:]
- 14. ¿Por qué el método Arrays.sort de Java utiliza dos algoritmos de clasificación diferentes para diferentes tipos?
- 15. ¿Cuáles son los criterios para elegir un algoritmo de clasificación?
- 16. Heroku buildpacks - instalar ejecutables que son utilizados por los paquetes de Python
- 17. ¿Una buena tarjeta de referencia/hoja de trucos con los algoritmos básicos de clasificación en C?
- 18. ¿Cómo puedo cambiar los finales de línea utilizados por fputcsv?
- 19. Cambiar los datos POST utilizados por Apache Bench por iteración
- 20. ¿Por qué son cargas automáticas, load_all! y requieren todos los utilizados en active_support.rb?
- 21. ¿Cuáles son las principales diferencias y beneficios de los algoritmos Porter y Lancaster Stemming?
- 22. Cómo limpiar los cachés utilizados por el kernel de Linux
- 23. ¿Cómo leer los datos de QNetworkReply utilizados por QWebPage?
- 24. eligiendo entre los algoritmos
- 25. ¿Cómo hacer un tipo natural en un NSArray?
- 26. ¿Por qué la implementación de Javascript de Bubble se ordena mucho más rápido que otros algoritmos de clasificación?
- 27. Fluidos estables en 3D Ejemplo
- 28. Protocolos utilizados por las bolsas de valores
- 29. imágenes de clasificación por color
- 30. ¿Cuáles son las mejores características/más estables de la biblioteca de cierre de Google
¿Le diste una oportunidad? –
@TDeBailleul "Darle una oportunidad" no es realmente útil en este caso. La clasificación puede ser estable en ciertos casos, pero no en otros, dependiendo del tamaño de los datos, cómo se construyó la matriz, etc. – omz
Ok, pensé que el comportamiento siempre era el mismo. Bueno saber. –