[objective-c] NSMutableDictionary를 통해 반복

키에 관계없이 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. 통화 사이의 순서를 보장하지 않습니다.


답변

  1. 단순 루프의 경우 빠른 열거가 블록 기반 루프보다 약간 빠릅니다.
  2. 빠른 열거보다 블록 기반 열거를 사용하여 동시 또는 역 열거를 수행하는 것이 더 쉽습니다. 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 */
}


답변