Sé NSDictionaries
como algo donde necesitas un key
para obtener un value
. Pero, ¿cómo puedo iterar sobre todo keys
y values
en a NSDictionary
, para saber qué claves hay y qué valores hay? Sé que hay algo llamado for-in-loop in JavaScript
. ¿Hay algo similar en Objective-C
?
ios
objective-c
foreach
iteration
nsdictionary
Alex Cio
fuente
fuente
Swift
sintaxis, consulte esta publicación: stackoverflow.com/a/24111700/419348Respuestas:
Sí,
NSDictionary
admite enumeración rápida. Con Objective-C 2.0, puede hacer esto:El método alternativo (que debe usar si se dirige a Mac OS X anterior a 10.5, pero aún puede usarlo en 10.5 y iPhone) es usar un
NSEnumerator
:fuente
El enfoque de bloque evita ejecutar el algoritmo de búsqueda para cada clave :
Aunque
NSDictionary
se implementa como una tabla hash (lo que significa que el costo de buscar un elemento esO(1)
), las búsquedas aún ralentizan su iteración por un factor constante .Mis medidas muestran que para un diccionario
d
de números ...... resumiendo los números con el enfoque de bloque ...
... en lugar del enfoque de bucle ...
... es aproximadamente un 40% más rápido .
EDITAR : El nuevo SDK (6.1+) parece optimizar la iteración del bucle, por lo que el enfoque de bucle ahora es aproximadamente un 20% más rápido que el enfoque de bloque , al menos para el caso simple anterior.
fuente
Esta es una iteración usando el enfoque de bloque:
Con el autocompletado es muy rápido de configurar, y no tiene que preocuparse por escribir un sobre de iteración.
fuente
NSMutableDictionary
el proceso