objective-c - tener - meta description seo
para cada bucle en el objetivo c para acceder al diccionario NSMutable (7)
La enumeración rápida se agregó en 10.5 y en el sistema operativo iPhone, y es significativamente más rápida, no solo de azúcar sintáctica. Si tiene que apuntar al tiempo de ejecución anterior (es decir, 10.4 y hacia atrás), deberá usar el método antiguo de enumeración:
NSDictionary *myDict = ... some keys and values ...
NSEnumerator *keyEnum = [myDict keyEnumerator];
id key;
while ((key = [keyEnum nextObject]))
{
id value = [myDict objectForKey:key];
... do work with "value" ...
}
No liberas el objeto enumerador y no puedes restablecerlo. Si desea volver a empezar, debe solicitar un nuevo objeto de enumerador del diccionario.
Estoy encontrando alguna dificultad para acceder a claves y valores de diccionarios mutables en Objective-C.
Supongamos que tengo esto:
NSMutableDictionary *xyz=[[NSMutableDictionary alloc] init];
Puedo establecer claves y valores. Ahora, solo quiero acceder a cada clave y valor, pero no sé el número de claves establecidas.
En PHP es muy fácil, algo así:
foreach ($xyz as $key => $value)
¿Cómo es posible en Objective-C?
La forma más fácil de enumerar un diccionario es
for (NSString *key in tDictionary.keyEnumerator)
{
//do something here;
}
donde tDictionary
es el NSDictionary
o NSMutableDictionary
que desea iterar.
Le sugiero que lea la Enumeración: Recorrer los elementos de una colección de la Guía de programación de colecciones para Cocoa . Hay un código de ejemplo para su necesidad.
Puede usar -[NSDictionary allKeys]
para acceder a todas las teclas y recorrerlas.
Si necesita mutar el diccionario al enumerar:
for (NSString* key in xyz.allKeys) {
[xyz setValue:[NSNumber numberWithBool:YES] forKey:key];
}
Solo para no dejar de lado la opción 10.6+ para enumerar claves y valores usando bloques ...
[dict enumerateKeysAndObjectsUsingBlock:^(id key, id object, BOOL *stop) {
NSLog(@"%@ = %@", key, object);
}];
Si quieres que las acciones ocurran concurrentemente:
[dict enumerateKeysAndObjectsWithOptions:NSEnumerationConcurrent
usingBlock:^(id key, id object, BOOL *stop) {
NSLog(@"%@ = %@", key, object);
}];
for (NSString* key in xyz) {
id value = xyz[key];
// do stuff
}
Esto funciona para todas las clases que cumplen con el protocolo NSFastEnumeration (disponible en 10.5+ e iOS), aunque NSDictionary
es una de las pocas colecciones que le permite enumerar claves en lugar de valores. Le sugiero que lea sobre la enumeración rápida en el Tema de programación de colecciones .
Oh, debo agregar, sin embargo, que NUNCA deberías modificar una colección al enumerarla.