Es decir: ¿el orden de las claves y los valores en un NSDictionary son siempre los mismos que en el momento de inicializar el NSDictionary? ¿O debería mantener un NSArray separado si realmente necesito saber el orden de las claves?¿Se ordenan las claves y valores en un NSDictionary?
Respuesta
No, no están pedidos. Siempre que no agregue ni elimine ningún elemento del diccionario, permanecerá en el mismo orden, pero tan pronto como agregue o elimine un elemento, el nuevo orden será completamente diferente.
Si necesita ordenar las claves/valores, use una NSArray (u otra estructura de datos ordenada) en su lugar.
nunca se garantiza que las claves estén en el mismo orden cuando se accede a un NSDictionary. Si se pueden comparar las claves (que supongo que se les puede dar su pregunta), entonces siempre puede ordenarlas si necesita acceder a ellas en orden ordenado.
Tendría que hacer esto leyendo primero las teclas en una matriz y ordenando la matriz por supuesto.
NSDictionary, según Apple's reference, es básicamente un contenedor alrededor de una tabla hash. Entonces no, no se garantiza que estén en un orden particular.
¿Cómo acceden a esa tabla hash? Nunca he visto una tabla hash simple, pero me gustaría saber cómo se ve. ¿Es eso una gran diferencia de usar dos NSArray síncrono internamente? –
¿Estás preguntando cómo se ve una tabla hash como una estructura de datos? Wiki tiene una muy buena explicación: http: //en.wikipedia.org/wiki/Hash_table Si desea saber cómo Apple los implementa y accede específicamente, me temo que lo único que tenemos disponible son los archivos de encabezado;) –
así que cuando lo hago bien, una tabla hash es casi todo sobre un Función hash que calculará el índice de matriz correcto para una clave de cadena dada + el tamaño de la matriz. Suena difícil de implementar, pero es bueno para el rendimiento. Si eso es cierto, no importaría mucho cuántos elementos se agregan a un diccionario. –
NSDiccionario claves & valores no están ordenados. Sus opciones:
- Mantener una matriz separada de las teclas en el orden que desee
- escritura o encontrar una clase existente que es un contenedor de lo anterior
- escritura o encontrar una subclase existente de NSDictionary que se suma API para ordenar
Matt Gallagher escribió una publicación de blog titulada “OrderedDictionary: Subclassing a Cocoa class cluster” que trata exactamente este problema, completa con el código de muestra.
De hecho, ni siquiera puede confiar en que el orden sea el mismo cuando se ejecuta el programa en dos dispositivos diferentes, incluso si es exactamente el mismo programa y la misma versión exacta del sistema operativo.
Por ejemplo, si ejecuta el programa en un iPad Air, el orden de los elementos dentro de NSDictionary puede ser diferente que cuando se ejecuta el mismo programa en un iPad Retina, incluso si la versión de iOS es exactamente la misma.
En resumen, nunca se debe confiar en el orden de los elementos en NSDictionary. Siempre debe suponer que pueden estar en cualquier orden no especificado, que puede ser diferente en diferentes dispositivos.
- 1. Obtener las claves de NSDictionary ordenadas por sus respectivos valores
- 2. Imprimir claves de NSDictionary en lugar de los valores
- 3. NSDictionary de Cocoa: ¿por qué se copian las claves?
- 4. ¿Cómo crear un NSDictionary con múltiples claves?
- 5. ¿Se pueden duplicar las llaves en NSDictionary?
- 6. cambiar las claves y valores en un diccionario en Python
- 7. array_walk_recursive - modificar las claves y los valores
- 8. Enumerar NSDictionary con claves y objetos, estilo PHP
- 9. ordena las claves de NSDictionary por valor de diccionario en un NSArray
- 10. NSDictionary con valores enteros
- 11. SPFileVersionCollection: ¿por qué las versiones se ordenan en orden mixto?
- 12. Los atributos XML se ordenan
- 13. Intercambiando claves y valores de un mapa en C++
- 14. dividir un diccionario en python en claves y valores
- 15. Valores Confirmando todas las claves en un diccionario han poblado
- 16. Error en CF9: valores para las claves struct únicas referenciadas y sobreescritas por otras claves
- 17. Cómo intercambiar claves y valores en un Mapa elegantemente
- 18. ¿Cómo enumero las claves y valores de una Hashtable?
- 19. tupla a dict: una de las claves y valores múltiples
- 20. fusionar dos matrices (claves y valores) en un objeto
- 21. Buscar matriz y devolver todas las claves y valores cuando se encuentra coincidencia
- 22. Las claves externas y NULL en MySQL
- 23. ¿Cómo recuperar todas las claves (o valores) de un std :: map y ponerlas en un vector?
- 24. Intercambio de claves y valores en un hash
- 25. Genéricos: cómo hacer cumplir las restricciones entre claves y valores en un mapa
- 26. números orderBy() no se ordenan correctamente C#
- 27. Claves compuestas MySql y valores nulos
- 28. Ordenación de las claves de diccionario basado en sus valores
- 29. Inicializando NSDictionary
- 30. ¿En qué se diferencian las claves públicas y privadas?
@ kraag22: en ninguna parte de la documentación 'NSDictionary' se hace ninguna promesa o garantía sobre el pedido; simplemente dice que proporciona una" interfaz programática para objetos que gestionan asociaciones inmutables de claves y valores ". Los documentos para los mensajes '-allKeys' y' -allValues' dicen que el orden devuelto por esos métodos no está definido, aunque probablemente no sería una mala idea hacerlo más explícito para otras formas de enumerar el elementos del diccionario. –