Jak mogę przechodzić przez wszystkie obiekty w NSMutableDictionary, niezależnie od kluczy?Zapętlenie przez NSMutableDictionary
Odpowiedz
standardowy sposób będzie wyglądać następująco
for(id key in myDict) {
id value = [myDict objectForKey:key];
[value doStuff];
}
Można wykorzystać [dict allValues]
uzyskać NSArray
swoich wartości. Pamiętaj, że to nie gwarantuje żadnej kolejności między połączeniami.
Chciałbym użyć tego na kluczu (id w słowniku), szczególnie w słowniku zmiennym, ponieważ ten drugi rzuca nieprzyjemny błąd, jeśli słownik jest modyfikowany podczas wyliczenia. – sigsegv
"to nie gwarantuje" - jest to często potrzebne (większość języków ma wersję słownika, który gwarantuje kolejność) - czy w praktyce * zachowuje porządek? – Adam
@Adam Na MacOS X, miałem dość zmiksowaną kolejność (nie kolejność wstawiania, nie alfabetyczną, nic), ale spójną między połączeniami. – jv42
można użyć
[myDict enumerateKeysAndObjectsUsingBlock: ^(id key, id obj, BOOL *stop) {
// do something with key and obj
}];
jeśli docelowy system operacyjny obsługuje bloki.
Innym sposobem jest użycie modułu Dicts Enumerator. Oto przykładowy kod z Apple:
NSEnumerator *enumerator = [myDictionary objectEnumerator];
id value;
while ((value = [enumerator nextObject])) {
/* code that acts on the dictionary’s values */
}
- Do prostego pętli, szybkie wyliczenie jest nieco szybciej niż blok oparte pętla
- Łatwiej zrobić współbieżne lub odwrócić wyliczenie z wyliczeniem bloku oparte niż z szybkie wyliczenie Gdy zapętlenie z NSDictionary można klucz i wartość w jednym uderzeniu z wyliczający bloku oparte dostać, podczas gdy przy szybkim wyliczenia trzeba użyć klucza, aby pobrać wartość w osobnym komunikacie wysłać
w fas t wyliczenie
for(id key in myDictionary) {
id value = [myDictionary objectForKey:key];
// do something with key and obj
}
w blokach:
[myDictionary enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
// do something with key and obj
}];
Nie trzeba przypisać wartość do zmiennej. Możesz uzyskać do niego bezpośredni dostęp za pomocą myDict[key]
.
for(id key in myDict) {
NSLog(@"Key:%@ Value:%@", key, myDict[key]);
}
- 1. Zapętlenie przez XML z jQuery
- 2. Zapętlenie przez python regex pasuje
- 3. php zapętlenie przez wielu tablic
- 4. Zapętlenie przez NSMutableArray w Swift
- 5. Dodaj klasy dynamicznie do dzieci przez zapętlenie przez div
- 6. NSMutableDictionary KVO
- 7. Podklasy NSMutableDictionary
- 8. static NSMutableDictionary
- 9. Uzyskiwanie dostępu do obiektów w NSMutableDictionary przez indeks
- 10. Aby utworzyć pusty słownik, [słownik NSMutableDictionary] lub [[NSMutableDictionary alloc] init]?
- 11. Bezpieczeństwo wątków NSMutableDictionary
- 12. Zapętlenie przez <tr> po przekazaniu identyfikatora tabeli
- 13. Ustaw wartość BOOL na NSMutableDictionary
- 14. zapętlenie w dwóch kierunkach
- 15. wydajny algorytm zamiast zapętlenie
- 16. zapętlenie wartości wyliczeniowych
- 17. Sprawdź, czy NSMutableDictionary jest pusty?
- 18. jak wstawić (Bool *) w NSMutableDictionary
- 19. Zapętlenie dźwięku HTML5 na iPhonie
- 20. Zapętlenie wartości wyliczeniowych w Swift
- 21. Dodaj do wpisów NSDictionary do NSMutableDictionary
- 22. Zapętlenie wszystkich dokumentów w indeksie elasticsearch
- 23. OrderBy/ThenBy zapętlenie - zagnieżdżonych list w C#
- 24. PHP Wskazówka: niezdefiniowany indeks podczas zapętlenie tablicy
- 25. Jak uzyskać liczbę NSMutableDictionary w iphone?
- 26. Jak utworzyć NSMutableDictionary w swift 2.0
- 27. NSMutableDictionary Dodawanie wielu obiektów do jednego klucza
- 28. NSMutableDictionary znacznie wolniejszy niż Java Map ... dlaczego?
- 29. Przekazywanie zmiennej NSInteger do NSMutableDictionary lub NSMutableArray
- 30. Zapętlenie daty w formacie R traci
Znalazłem więcej sposobów, aby zrobić to źle, niż możesz wstrząsnąć kijem. Dziękuję Ci!!! – mpemburn
Gdyby tylko istniał sposób na zrobienie czegoś takiego: 'for (id key, value in myDict)' to byłoby idealne. –
Dzięki! Czasami łatwo zapomnieć o prostej składni. – abriggs