키에 관계없이 NSMutableDictionary의 모든 개체를 어떻게 반복합니까?
답변
표준 방법은 다음과 같습니다.
for(id key in myDict) {
id value = [myDict objectForKey:key];
[value doStuff];
}
답변
당신이 사용할 수있는
[myDict enumerateKeysAndObjectsUsingBlock: ^(id key, id obj, BOOL *stop) {
// do something with key and obj
}];
대상 OS가 블록을 지원하는 경우.
답변
당신은 당신의 가치 [dict allValues]
를 얻는 데 사용할 수 있습니다 NSArray
. 통화 사이의 순서를 보장하지 않습니다.
답변
- 단순 루프의 경우 빠른 열거가 블록 기반 루프보다 약간 빠릅니다.
- 빠른 열거보다 블록 기반 열거를 사용하여 동시 또는 역 열거를 수행하는 것이 더 쉽습니다. NSDictionary로 루핑 할 때 블록 기반 열거자를 사용하여 한 번의 히트에서 키와 값을 얻을 수있는 반면, 빠른 열거에서는 키를 사용하여 검색해야합니다. 별도 메시지 보내기의 값
빠른 열거로
for(id key in myDictionary) {
id value = [myDictionary objectForKey:key];
// do something with key and obj
}
블록에서 :
[myDictionary enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
// do something with key and obj
}];
답변
변수에 값을 할당 할 필요가 없습니다. 을 사용하여 직접 액세스 할 수 있습니다 myDict[key]
.
for(id key in myDict) {
NSLog(@"Key:%@ Value:%@", key, myDict[key]);
}
답변
또 다른 방법은 Dicts 열거자를 사용하는 것입니다. 다음은 Apple의 샘플 코드입니다.
NSEnumerator *enumerator = [myDictionary objectEnumerator];
id value;
while ((value = [enumerator nextObject])) {
/* code that acts on the dictionary’s values */
}