2010-03-22 24 views
5

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

7

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.

+0

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

+0

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

6

Si necesita un NSDictionary que mantiene el orden, eche un vistazo a CHDataStructure's CHOrderedDictionary, que hace exactamente eso. Lo uso todo el tiempo.

+0

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

+1

Sí, CHDataStructures se ejecuta en Mac y iPhone. –

3

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.

De allKeys description:

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.

2

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.

Cuestiones relacionadas