[ios] NSArray를 통해 NSSet을 사용하는 것이 언제 더 낫습니까?

내 앱에서 NSSet을 여러 번 사용했지만 직접 만든 적이 없습니다.

an NSSet대신 an을 사용하는 것이 더 낫고 NSArray그 이유는 무엇입니까?



답변

컬렉션의 항목 순서가 중요하지 않은 경우 집합은 컬렉션에서 항목을 찾는 데 더 나은 성능을 제공합니다.

그 이유는 집합이 항목 (사전과 같은)을 찾기 위해 해시 값을 사용하는 반면 배열은 특정 객체를 찾기 위해 전체 내용을 반복해야하기 때문입니다.


답변

Apple 문서 의 이미지 는이를 매우 잘 설명합니다.

Objective-C 컬렉션

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

  • 인덱스로 항목에 액세스 할 수 있습니다.
  • 주문
  • 중복 허용

그게 전부입니다! 도움이되는지 알려주세요.


답변

NSOrderedSet은 iOS 5 이상에서 사용할 수 있으므로 데이터 구조에서 중복 객체를 원하는지 여부가 주요 차이점입니다.


답변

NSArray :

  1. 정렬 된 데이터 수집
  2. 중복 허용
  3. 컬렉션 형 객체입니다

NSSet :

  1. 정렬되지 않은 데이터 수집
  2. 중복 허용 안함
  3. 또한 컬렉션 유형 객체입니다.

답변

배열은 인덱스로 항목에 액세스하는 데 사용됩니다. 모든 항목을 배열에 여러 번 삽입 할 수 있습니다. 배열은 요소의 순서를 관리합니다.

세트는 기본적으로 항목이 컬렉션에 있는지 여부를 확인하는 데만 사용됩니다. 항목에는 순서 또는 인덱싱 개념이 없습니다. 한 세트의 아이템을 두 번 가질 수 없습니다.

배열에 요소가 포함되어 있는지 확인하려면 모든 항목을 확인해야합니다. 세트는 더 빠른 알고리즘을 사용하도록 설계되었습니다.

값이없는 사전과 같은 집합을 상상할 수 있습니다.

배열과 집합이 유일한 데이터 구조는 아닙니다. 큐, 스택, 힙, 피보나치의 힙과 같은 다른 것이 있습니다. 알고리즘과 데이터 구조에 대한 책을 읽는 것이 좋습니다.

자세한 내용은 wikipedia 를 참조하십시오.


답변

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)}