2009-08-18 16 views

Respuesta

16

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.

+2

@ 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. –

0

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.

0

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.

+0

¿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? –

+0

¿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;) –

+0

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. –

2

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
0

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.

Cuestiones relacionadas