답변:
컬렉션의 항목 순서가 중요하지 않은 경우 집합은 컬렉션에서 항목을 찾는 데 더 나은 성능을 제공합니다.
그 이유는 집합이 항목 (사전과 같은)을 찾기 위해 해시 값을 사용하는 반면 배열은 특정 객체를 찾기 위해 전체 내용을 반복해야하기 때문입니다.
Apple 문서 의 이미지 는이를 매우 잘 설명합니다.

Array되는 순서 요소의 순서를 (추가 할 때 순서는 유지됩니다)
[array addObject:@1];
[array addObject:@2];
[array addObject:@3];
[array addObject:@4];
[array addObject:@6];
[array addObject:@4];
[array addObject:@1];
[array addObject:@2];
[1, 2, 3, 4, 6, 4, 1, 2]
SetA는 없다 구별 (중복 없음) 정렬되지 않은 요소 목록
[set addObject:@1];
[set addObject:@2];
[set addObject:@3];
[set addObject:@4];
[set addObject:@6];
[set addObject:@4];
[set addObject:@1];
[set addObject:@2];
[1, 2, 6, 4, 3]
이에 대한 가장 좋은 대답은 Apple의 자체 문서 입니다.

주요 차이점은 NSArray정렬 된 컬렉션과 NSSet정렬되지 않은 컬렉션에 대한 것입니다.
거기 여러 기사와 같은 둘 사이의 속도 차이에 대한 그 이야기가 있습니다 이 하나 . 순서가 지정되지 않은 컬렉션을 반복하는 경우 NSSet좋습니다. 그러나 대부분의 경우, 당신은 오직 한 사람 만이 할 NSArray수있는 일을해야하기 때문에 그러한 능력을 위해 속도를 희생해야합니다.
NSSet
NSArray
그게 전부입니다! 도움이되는지 알려주세요.
NSSet인덱싱을 위해 항상 희생 할 필요는 없습니다 . 동일한 데이터에 대해 두 개의 서로 다른 데이터 구조를 사용하는 것이 일반적입니다. 또는 해당 배열을 구축하고 인덱싱합니다. :)하지만 이미 구현 된 DB를 사용하는 것이 좋습니다.
NSSet및 NSArray에 관한 것이므로 제 답변은 정확하고 완전합니다. 예, 다른 데이터 구조를 구축 할 수 있지만 저는이 두 가지를 비교하고 있습니다.
NSArray와 일부 functioanlity을 NSSet, 정답은 "사용하지 NSArray희생 성능". 답은 둘 다 결합하거나 다른 데이터 구조를 사용하는 것입니다.
배열은 인덱스로 항목에 액세스하는 데 사용됩니다. 모든 항목을 배열에 여러 번 삽입 할 수 있습니다. 배열은 요소의 순서를 관리합니다.
세트는 기본적으로 항목이 컬렉션에 있는지 여부를 확인하는 데만 사용됩니다. 항목에는 순서 또는 인덱싱 개념이 없습니다. 한 세트의 아이템을 두 번 가질 수 없습니다.
배열에 요소가 포함되어 있는지 확인하려면 모든 항목을 확인해야합니다. 세트는 더 빠른 알고리즘을 사용하도록 설계되었습니다.
값이없는 사전과 같은 집합을 상상할 수 있습니다.
배열과 집합이 유일한 데이터 구조는 아닙니다. 큐, 스택, 힙, 피보나치의 힙과 같은 다른 것이 있습니다. 알고리즘과 데이터 구조에 대한 책을 읽는 것이 좋습니다.
자세한 내용은 wikipedia 를 참조하십시오.
contains은 O(n). 배열에 없을 때 비교 횟수는 n입니다. 객체가 배열에있을 때 평균 비교 횟수는 n/2입니다. 물체가 발견 되더라도 성능이 끔찍합니다.
NSArrays는 s에 비해 다른 속도 이점이 NSSet있습니다. 항상 그렇듯이 이것은 절충안입니다.
NSArray *Arr;
NSSet *Nset;
Arr=[NSArray arrayWithObjects:@"1",@"2",@"3",@"4",@"2",@"1", nil];
Nset=[NSSet setWithObjects:@"1",@"2",@"3",@"3",@"5",@"5", nil];
NSLog(@"%@",Arr);
NSLog(@"%@",Nset);
어레이
2015-12-04 11 : 05 : 40.935 [598 : 15730] (1, 2, 3, 4, 2, 1)
세트
2015-12-04 11 : 05 : 43.362 [598 : 15730] {(3, 1, 2, 5)}
여기 에서 NSArray와 NSSet데이터 구조에 대한 꽤 철저한 비교를 찾을 수 있습니다 .
짧은 결론 :
예, NSArray는 단순히 유지하고 반복하기 때문에 NSSet보다 빠릅니다. 구성 속도가 50 %, 반복 속도가 500 % 빠릅니다. 교훈 : 내용 만 반복해야한다면 NSSet을 사용하지 마십시오.
물론 포함 여부를 테스트해야하는 경우 NSArray를 피하기 위해 열심히 노력하십시오. 반복 및 포함 테스트가 모두 필요하더라도 NSSet을 선택해야합니다. 컬렉션을 순서대로 유지하고 포함 여부를 테스트해야하는 경우 각각 동일한 개체를 포함하는 두 개의 컬렉션 (NSArray 및 NSSet)을 유지하는 것을 고려해야합니다.
NSDictionary는 키 데이터를 복사해야하기 때문에 NSMapTable보다 생성 속도가 느립니다. 검색 속도가 빨라서이를 보완합니다. 물론이 둘은 서로 다른 기능을 가지고 있으므로 대부분의 경우 다른 요인을 고려하여 결정해야합니다.
약간을 추가하기 위해 가끔 set을 사용하여 배열에서 중복을 제거합니다.
NSMutableSet *set=[[NSMutableSet alloc]initWithArray:duplicateValueArray]; // will remove all the duplicate values