NSMutableDictionary를 통해 반복


답변:


211

표준 방법은 다음과 같습니다.

for(id key in myDict) {
    id value = [myDict objectForKey:key];
    [value doStuff];
}

다음과 같은 방법 for (id key, value in myDict)이 있다면 완벽 할 것입니다.
Luis Artola 2013

4
id key in myDict.allKeys딕셔너리보다는 키 (예 :)를 반복하는 것이 좋습니다. 이를 통해 사전을 변경할 수 있습니다.
marcel salathe

29

당신이 사용할 수있는

[myDict enumerateKeysAndObjectsUsingBlock: ^(id key, id obj, BOOL *stop) {
    // do something with key and obj
}];

대상 OS가 블록을 지원하는 경우.


22

당신은 당신의 가치 [dict allValues]를 얻는 데 사용할 수 있습니다 NSArray. 통화 사이의 순서를 보장하지 않습니다.


3
나는 (사전의 id 키), 특히 가변 사전에서 이것을 사용합니다. 왜냐하면 후자는 열거되는 동안 사전이 수정되면 불쾌한 오류가 발생하기 때문입니다.
sigsegv 2010 년

"보장하지 않습니다"-자주 필요합니다 (대부분의 언어에는 순서를 보장하는 사전 버전이 있습니다)- 실제로 순서를 유지합니까?
Adam

@Adam MacOS X에서는 순서 (삽입 순서가 아니고 알파벳 순서가 아님)가 꽤 섞여 있었지만 호출간에 일관성이있었습니다.
jv42

매핑이 중요하지 않은 경우 NSDictionary를 사용하는 이유는 무엇입니까?
스티븐

2
@stephen 일반적으로 어딘가에서 중요하고 다른 곳에서는 중요하지 않습니다. 또한 일부 경우에 유용 할 수있는 고유 키 제약 조건을 얻습니다.
jv42

4
  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
  }];

3

변수에 값을 할당 할 필요가 없습니다. 을 사용하여 직접 액세스 할 수 있습니다 myDict[key].

    for(id key in myDict) {
        NSLog(@"Key:%@ Value:%@", key, myDict[key]);
    }

2

또 다른 방법은 Dicts 열거자를 사용하는 것입니다. 다음은 Apple의 샘플 코드입니다.

NSEnumerator *enumerator = [myDictionary objectEnumerator];
id value;

while ((value = [enumerator nextObject])) {
    /* code that acts on the dictionary’s values */
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.