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;
}
어디 tDictionary
이다 NSDictionary
또는 NSMutableDictionary
당신은 반복합니다.
답변
Cocoa를위한 Collections Programming Guide 의 Enumeration : Collections Collections 요소 부분 을 읽는 것이 좋습니다 . 필요한 샘플 코드가 있습니다.
답변
빠른 열거는 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" ...
}
열거 자 개체를 해제하지 않고 다시 설정할 수 없습니다. 다시 시작하려면 사전에서 새 열거 자 객체를 요청해야합니다.