사전을 보면서 반복할 수 있는 방법이 있나요?
알고있어요NSDictionaries필요한 부분으로서key을 얻기 위해value하지만 어떻게 반복할 수 있을까?keys그리고.values에 있어서NSDictionary어떤 키가 있고 어떤 값이 있는지 알 수 있습니다.'포인루프'라는 게 있다는 걸 알아요JavaScript에 비슷한 게 있나요?Objective-C?
네.NSDictionary는 고속 열거를 지원합니다.Objective-C 2.0에서는 다음 작업을 수행할 수 있습니다.
// To print out all key-value pairs in the NSDictionary myDict
for(id key in myDict)
NSLog(@"key=%@ value=%@", key, [myDict objectForKey:key]);
대체 방법(Mac OS X 10.5 이전 버전을 대상으로 하지만 10.5 및 iPhone에서 사용할 수 있는 경우)은NSEnumerator:
NSEnumerator *enumerator = [myDict keyEnumerator];
id key;
// extra parens to suppress warning about using = instead of ==
while((key = [enumerator nextObject]))
NSLog(@"key=%@ value=%@", key, [myDict objectForKey:key]);
블록 접근법에서는 모든 키에 대해 룩업알고리즘을 실행하는 것을 회피합니다.
[dict enumerateKeysAndObjectsUsingBlock:^(id key, id value, BOOL* stop) {
NSLog(@"%@ => %@", key, value);
}];
해시 테이블로 구현되어 있어도(즉, 요소 검색 비용은) 룩업은 반복 속도를 일정하게 늦춥니다.
제가 측정한 바로는 사전의 경우입니다.d숫자의...
NSMutableDictionary* dict = [NSMutableDictionary dictionary];
for (int i = 0; i < 5000000; ++i) {
NSNumber* value = @(i);
dict[value.stringValue] = value;
}
블록 접근법으로 숫자를 합산하면...
__block int sum = 0;
[dict enumerateKeysAndObjectsUsingBlock:^(NSString* key, NSNumber* value, BOOL* stop) {
sum += value.intValue;
}];
루프 어프로치가 아니라...
int sum = 0;
for (NSString* key in dict)
sum += [dict[key] intValue];
...가 약 40% 더 빠릅니다.
편집: 새로운 SDK(6.1+)는 루프 반복을 최적화하는 것처럼 보이기 때문에 적어도 위의 간단한 경우에서는 루프 접근 방식이 블록 접근 방식보다 약 20% 빨라졌습니다.
이것은 블록 접근법을 사용한 반복입니다.
NSDictionary *dict = @{@"key1":@1, @"key2":@2, @"key3":@3};
[dict enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
NSLog(@"%@->%@",key,obj);
// Set stop to YES when you wanted to break the iteration.
}];
자동 완성은 설정 속도가 매우 빠르며 반복 엔벨로프 작성에 대해 걱정할 필요가 없습니다.
언급URL : https://stackoverflow.com/questions/1284429/is-there-a-way-to-iterate-over-a-dictionary
'programing' 카테고리의 다른 글
| VBA 함수에서 결과를 반환하는 방법 (0) | 2023.04.10 |
|---|---|
| 클릭 가능한 라벨이 있는 체크박스를 작성하려면 어떻게 해야 합니까? (0) | 2023.04.10 |
| macOS Montrey, Xcode의 코드 서명 오류 - 리소스 포크, 파인더 정보 또는 이와 유사한 이물질은 허용되지 않습니다. (0) | 2023.04.10 |
| xls-csv 변환기 (0) | 2023.04.10 |
| Windows 배치파일은 자신의 파일명을 결정할 수 있습니까? (0) | 2023.04.10 |