programing

NSMutable 딕셔너리에 액세스하기 위한 Objective-C의 각 루프에 대해

codeshow 2023. 4. 12. 22:40
반응형

NSMutable 딕셔너리에 액세스하기 위한 Objective-C의 각 루프에 대해

Objective-C에서 변환 가능한 사전 키와 값에 액세스하는 데 어려움이 있습니다.

예를 들어 다음과 같습니다.

NSMutableDictionary *xyz=[[NSMutableDictionary alloc] init];

키와 값을 설정할 수 있습니다.각 키와 값에 액세스하고 싶은데, 설정된 키의 수를 알 수 없습니다.

PHP에서는 다음과 같이 매우 간단합니다.

foreach ($xyz as $key => $value)

Objective-C에서 어떻게 가능합니까?

for (NSString* key in xyz) {
    id value = xyz[key];
    // do stuff
}

NSFastEnumeration 프로토콜(10.5+ 및 iOS에서 사용 가능)을 준수하는 모든 클래스에 대해 작동합니다.NSDictionary는 값이 아닌 키를 열거할 수 있는 몇 안 되는 컬렉션 중 하나입니다.Collections Programming Topic에서 빠른 열거에 대해 읽어보시기 바랍니다.

그러나 컬렉션을 열거하는 동안에는 절대 수정하지 말아야 한다는 점을 덧붙여야 합니다.

블록을 사용하여 키와 값을 열거하는 10.6+ 옵션을 빼놓을 수 없습니다.

[dict enumerateKeysAndObjectsUsingBlock:^(id key, id object, BOOL *stop) {
    NSLog(@"%@ = %@", key, object);
}];

액션을 동시에 실행하는 경우:

[dict enumerateKeysAndObjectsWithOptions:NSEnumerationConcurrent
                              usingBlock:^(id key, id object, BOOL *stop) {
    NSLog(@"%@ = %@", key, object);
}];

열거 중에 사전을 변환해야 하는 경우:

for (NSString* key in xyz.allKeys) {
    [xyz setValue:[NSNumber numberWithBool:YES] forKey:key];
}

사전을 열거하는 가장 쉬운 방법은

for (NSString *key in tDictionary.keyEnumerator) 
{
    //do something here;
}

어디에tDictionaryNSDictionary또는NSMutableDictionary반복하고 싶을 거야

Enumeration을 읽어보실 것을 권장합니다. Collections Programming Guide for Cocoa의 Collections Elements(컬렉션의 요소) 살펴봅니다.필요한 샘플 코드가 있습니다.

10.5와 iPhone OS에 고속 열거가 추가되어 구문설탕뿐만 아니라 상당히 빠릅니다.이전 런타임(예: 10.4 이상)을 대상으로 해야 하는 경우 이전 방법으로 다음을 열거해야 합니다.

NSDictionary *myDict = ... some keys and values ...
NSEnumerator *keyEnum = [myDict keyEnumerator];
id key;

while ((key = [keyEnum nextObject]))
{
    id value = [myDict objectForKey:key];
    ... do work with "value" ...
}

열거자 개체는 해제하지 않으며 재설정할 수 없습니다.다시 시작하려면 사전에서 새 열거자 개체를 요청해야 합니다.

를 사용하여 모든 키에 액세스하여 키를 루프할 수 있습니다.

언급URL : https://stackoverflow.com/questions/2143372/for-each-loop-in-objective-c-for-accessing-nsmutable-dictionary

반응형