2012-03-05 10 views
8

Soy bastante nuevo en Objective-C y estaba trabajando con NSDictionaries hoy y encontré el método allKeys. Según tengo entendido, devuelve un NSArray que contiene las claves del diccionario en un orden aleatorio. Sin embargo, ¿este orden es siempre el mismo? es decir, si llamo a todas las Llaves en el mismo diccionario 20 veces seguidas, ¿me garantiza que obtendré el mismo orden de resultados?NSDictionary allKeys - ¿siempre devuelve el mismo pedido?

Gracias,

Respuesta

8

Si se llama al método 20 veces en una fila en un diccionario que no se está mutado, lo más probable es devolverá el mismo orden. Dicho esto, lo desaconsejaría fuertemente a que confíe en esto, ya que depende en gran medida de los detalles de la implementación. La única razón por la que digo que probablemente devolverá el mismo pedido es porque al acceder a un diccionario no se debe mutar ninguna estructura interna, y en ausencia de mutación, la única otra manera de obtener un orden diferente sería explícitamente introducir el no determinismo, es decir, depender del estado global, como un generador de números aleatorios o el reloj de la CPU, y me resulta extremadamente dudoso que NSDictionary haga algo de esto.

Si necesita garantizar el mismo orden de claves, probablemente debería ordenarlas una vez que las obtenga del diccionario.

+0

A menos NSDictionary hace refrito perezoso, por supuesto, en cuyo caso el acceso podría desencadenar una repetición. –

+0

@Catfish_Man: Si ese fuera el caso, no sería seguro pasar un 'NSDictionary' a otro hilo. La sabiduría actual dicta que pasar 'NSDictionaries' entre hilos es seguro siempre que el diccionario sea inmutable. –

+0

Un diccionario inmutable nunca debería volver a configurarse una vez que se haya rellenado, ya que nada de eso puede cambiar. Me refería a uno mutable. –

0

La manera de resolver esto es escribir un programa de prueba rápida. En realidad, nunca debe confiar en resultados no garantizados ni documentados como este. Es una mala práctica de programación, y es bastante probable que rompa con una nueva versión del sistema operativo.

Si necesita que las claves vuelvan a estar en un orden particular, debe ordenarlas después de recuperarlas. Puede hacerlo con el grupo de métodos -[NSArray sortedArrayUsing...].

Cuestiones relacionadas