Me he encontrado con el mismo problema que encontré in this question. Sin embargo, tengo una pregunta de seguimiento. Parece que estoy en la misma situación que el asker original: tengo un plist con una jerarquía de diccionarios que definen una pantalla de configuración. Estos son no mutable y serán permanecen iguales en toda la aplicación. Dado que la discusión original parece enfocarse en los problemas que surgen de la mutación del diccionario, debo pedir confirmación: ¿el orden de un diccionario está garantizado igual que en el plist, es decir, tal como se lee (con initWithContentsOfFile)? ¿Puedo usar allKeys en este caso para obtener una matriz de claves de orden correcto si el diccionario nunca cambia?¿Está garantizado el orden de clave de NSDictionary igual que el inicializado si nunca cambia?
Respuesta
No, las claves probablemente no aparezcan en el mismo orden que su archivo plist
. No puedo mirar debajo del capó, pero supongo que las claves están ordenadas de cualquier manera que proporcione una búsqueda eficiente. La documentación para allKeys
dice que el orden de los elementos en la matriz no está definido.
Si necesita un NSDictionary
que mantiene el orden, eche un vistazo a CHDataStructure's CHOrderedDictionary
, que hace exactamente eso. Lo uso todo el tiempo.
Lo necesito en el iPhone, por lo que Cocoa Touch. Me pregunto si funciona así. En cualquier caso, responderé a mi propia pregunta: no, aparentemente, NSDictionary no puede esperarse que esté en ningún orden. Por lo tanto, estoy haciendo lo que he visto que otros sugieren: incluir una matriz con el orden y la clave "orden". La gente ha estado diciendo que este torpe doble mantenimiento de datos no es para nada torpe en su opinión. Todavía torpe, sin embargo. – Thaurin
Sí, CHDataStructures se ejecuta en Mac y iPhone. –
No supongo que las claves estarán en ningún tipo de orden porque allKeys
no garantiza el pedido.
Internamente, NSDictionary
uses a hash table.
El orden de los elementos de la matriz no está definido.
Si desea mostrar los valores en algún orden, obtenga las claves, ordene la matriz de teclas y luego obtenga el valor para cada tecla.
Nada en absoluto se garantiza sobre pedido. Ni siquiera está garantizado que iterar dos veces sobre un diccionario te dará las claves en el mismo orden.
- 1. ¿Está garantizado que std :: cout esté inicializado?
- 2. Está estático inicializado inmodificableCollection.get garantizado inmutable?
- 3. ¿El orden de un arraylist está garantizado en C# .NET?
- 4. ¿El orden de inicialización está garantizado por la norma?
- 5. ¿El orden de una matriz asociativa está garantizado en PHP?
- 6. ¿Está garantizado que "(flotante) entero == entero" será igual en C#?
- 7. ¿Está TCP garantizado para llegar en orden?
- 8. orden de semáforo garantizado?
- 9. Will std :: multimap conservará el orden de inserción si la clave de 2 elementos es igual a la otra?
- 10. ¿Está garantizado que foreach iterará en el orden de matriz en php?
- 11. ¿El método de extensión LINQ está garantizado para conservar el orden?
- 12. ¿Está garantizado que la declaración foreach de .NET itere una colección en el mismo orden en el que se creó?
- 13. ¿Está garantizado que el puntero sea> cierto valor?
- 14. ¿Está garantizado el orden de operaciones de izquierda a derecha en Java?
- 15. ¿Está garantizado el orden de un diccionario de Python en las iteraciones?
- 16. ¿Está garantizado el orden de los resultados provenientes de una lista de comprensión?
- 17. clave Fecha de NSDictionary
- 18. Colección clave/valor que mantiene el orden
- 19. Cambia el orden de XML usando XDocument
- 20. ¿El orden de iteración a través de std :: map es conocido (y está garantizado por el estándar)?
- 21. ¿Está garantizado que el iterador .each en ruby siempre da el mismo orden en los mismos elementos cada vez?
- 22. clave Adecuado para NSDictionary
- 23. ¿INSERT RETURNING está garantizado para devolver las cosas en el orden "correcto"?
- 24. ¿Está garantizado que un servicio de android llama a Destroy()?
- 25. ¿Por qué el tipo "int" nunca es igual a "nulo"?
- 26. ¿Es el resultado de List <T>. Find All garantizado que está en el mismo orden que la lista original?
- 27. COALESCE: ¿está garantizado un cortocircuito?
- 28. ¿Está garantizado que args [0] sea la ruta de ejecución?
- 29. ¿Cómo obtener el objeto para la clave de NSDictionary?
- 30. ¿Este código está garantizado por el estándar C?
Mi aplicación no los muestra en el mismo orden que el plist, que fue una de las razones por las que empecé a preguntarme. Pero ahora sé que es undeetheles no definido. – Thaurin
En mi aplicación, no siempre se muestran en el mismo orden que el plist, depende del texto que se lea en ese momento. – xcoder