Eu sei NSDictionaries
como algo em que você precisa de um key
para obter um value
. Mas como posso iterar tudo keys
e values
em um NSDictionary
, para que eu saiba quais chaves existem e quais valores existem? Eu sei que há uma coisa chamada para-in-circuito no JavaScript
. Existe algo semelhante Objective-C
?
ios
objective-c
foreach
iteration
nsdictionary
Alex Cio
fonte
fonte
Swift
sintaxe, consulte este post: stackoverflow.com/a/24111700/419348Respostas:
Sim,
NSDictionary
suporta enumeração rápida. Com o Objective-C 2.0, você pode fazer isso:O método alternativo (que você deve usar se tiver como alvo o Mac OS X pré-10.5, mas ainda pode usar o 10.5 e o iPhone) é usar um
NSEnumerator
:fonte
A abordagem de bloco evita a execução do algoritmo de pesquisa para cada chave :
Embora
NSDictionary
seja implementado como uma hashtable (o que significa que o custo de procurar um elemento éO(1)
), as pesquisas ainda diminuem sua iteração por um fator constante .Minhas medidas mostram que, para um dicionário
d
de números ...... resumindo os números com a abordagem de bloco ...
... em vez da abordagem de loop ...
... é cerca de 40% mais rápido .
EDIT : O novo SDK (6.1+) parece otimizar a iteração de loop, portanto, a abordagem de loop é agora cerca de 20% mais rápida que a abordagem de bloco , pelo menos no caso simples acima.
fonte
Esta é a iteração usando a abordagem de bloco:
O preenchimento automático é muito rápido de configurar, e você não precisa se preocupar em escrever o envelope da iteração.
fonte
NSMutableDictionary
no processo