dla każdej pętli w celu uzyskania dostępu do słownika NSM
Znajduję pewne trudności w dostępie do zmiennych kluczy słownikowych i wartości w Objective-C.
Załóżmy, że mam to:
NSMutableDictionary *xyz=[[NSMutableDictionary alloc] init];
Mogę ustawić klucze i wartości. Chcę tylko uzyskać dostęp do każdego klucza i wartości, ale nie znam liczby ustawionych kluczy.
W PHP jest to bardzo proste, coś w następujący sposób:
foreach ($xyz as $key => $value)
Jak to możliwe w Objective-C?
7 answers
for (NSString* key in xyz) {
id value = xyz[key];
// do stuff
}
Działa to dla każdej klasy, która jest zgodna z protokołem NSFastEnumeration (dostępnym w wersjach 10.5+ i iOS), choć NSDictionary
jest jedną z niewielu kolekcji, która pozwala na wyliczanie kluczy zamiast wartości. Proponuję poczytać o szybkim wyliczaniu w temacie Programowanie zbiorów .
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-24 07:37:36
Aby nie pominąć opcji 10.6+ do wyliczania kluczy i wartości za pomocą bloków...
[dict enumerateKeysAndObjectsUsingBlock:^(id key, id object, BOOL *stop) {
NSLog(@"%@ = %@", key, object);
}];
Jeśli chcesz, aby akcje miały miejsce jednocześnie:
[dict enumerateKeysAndObjectsWithOptions:NSEnumerationConcurrent
usingBlock:^(id key, id object, BOOL *stop) {
NSLog(@"%@ = %@", key, object);
}];
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-27 05:43:35
Jeśli potrzebujesz zmutować słownik podczas wyliczania:
for (NSString* key in xyz.allKeys) {
[xyz setValue:[NSNumber numberWithBool:YES] forKey:key];
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-03 20:10:00
Proponuję przeczytać wyliczenie: przemierzanie elementów kolekcji część podręcznika programowania zbiorów dla Cocoa . Istnieje przykładowy kod do Twoich potrzeb.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-29 21:24:00
Najprostszym sposobem wyliczenia słownika jest
for (NSString *key in tDictionary.keyEnumerator)
{
//do something here;
}
Gdzie tDictionary
jest NSDictionary
lub NSMutableDictionary
, które chcesz iterować.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-11 07:49:56
Szybkie wyliczanie zostało dodane w 10.5 i w iPhone OS, i jest znacznie szybsze, nie tylko syntaktyczny cukier. 10.4 i Wstecz), musisz użyć starej metody wyliczania:
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" ...
}
Nie zwalniasz obiektu enumerator i nie możesz go zresetować. Jeśli chcesz zacząć od nowa, musisz poprosić o nowy obiekt enumerator ze słownika.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-27 06:12:57
Możesz użyć -[NSDictionary allKeys]
aby uzyskać dostęp do wszystkich klawiszy i pętli przez to.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-29 00:42:26