Wiem NSDictionaries
jako coś, czego potrzebujesz key
, aby uzyskać value
. Ale w jaki sposób można iteracyjne nad wszystkim keys
i values
w sposób NSDictionary
, tak, że wiem, co klucze istnieją, i jakie wartości są? Wiem, że jest coś o nazwie dla w pętli w JavaScript
. Czy jest coś podobnego Objective-C
?
ios
objective-c
foreach
iteration
nsdictionary
Alex Cio
źródło
źródło
Swift
składni, zapoznaj się z tym postem: stackoverflow.com/a/24111700/419348Odpowiedzi:
Tak,
NSDictionary
obsługuje szybkie wyliczanie. Z Objective-C 2.0 możesz to zrobić:Alternatywną metodą (której musisz użyć, jeśli celujesz w Mac OS X w wersji wcześniejszej niż 10.5, ale nadal możesz korzystać z wersji 10.5 i iPhone'a), to
NSEnumerator
:źródło
Podejście blokowe pozwala uniknąć uruchamiania algorytmu wyszukiwania dla każdego klucza :
Mimo że
NSDictionary
jest implementowany jako tablica mieszająca (co oznacza, że koszt wyszukiwania elementu wynosiO(1)
), wyszukiwania wciąż spowalniają twoją iterację o stały czynnik .Moje pomiary pokazują, że dla słownika
d
liczb ...... sumując liczby z podejściem blokowym ...
... zamiast podejścia w pętli ...
... jest około 40% szybszy .
EDYCJA : Nowy zestaw SDK (6.1+) wydaje się optymalizować iterację pętli, więc podejście do pętli jest teraz około 20% szybsze niż podejście do bloku , przynajmniej w powyższym prostym przypadku.
źródło
Oto iteracja przy użyciu podejścia blokowego:
Dzięki autouzupełnianiu jest bardzo szybki do ustawienia i nie musisz się martwić pisaniem koperty iteracyjnej.
źródło
NSMutableDictionary
proces