2010-02-18 2 views
3

DVD 및 VHS라는 Movie 객체가 2 개 있습니다. 이 배열의 대칭 차이점을 찾고 싶습니다. 나는 어떤 영화가 DVD에없는 VHS에 살고, 어떤 영화는 VHS가 아닌 DVD에 있는지 알고 싶다.두 개의 배열의 대칭 차이점

누구나 (그것을 선호하는 C 또는 Objective-C) 그것을 해결하는 빠른 알고리즘이 있다면 말해 줄래? 사전을 사용하면 더 빠르고 쉽게 해결할 수 있습니까? 이런 종류의 문제가 (또는 단지 "대칭 차이"입니까?)

감사합니다.

답변

2

목록에 중복을 허용할지 여부에 따라 NSArray이 아닌 NSSet을 사용하면 더 좋은 결과를 얻을 수 있습니다.

NSSetintersectsSet:과 같은 방법을 제공하여 필요한 것을 제공해야합니다.

공용 기능이 필요한 경우 NSMutableSet을 사용할 수 있습니다.

+2

대칭 차이는'(A 유니온 B) - (A intersect B)', 또는 이와 동등하게, (A 마이너스 B) 유니온입니다 B 마이너스 A)'. – kennytm

+0

내 배열에는 중복 된 것이 없습니다. 'intersectsSet :'는 그들이 교차하는지 여부를 알려주는'BOOL' 만 반환하는 것처럼 보입니다. 나는 교차로의 반대편을 찾고있다. 나는'NSSet' 문서를 살펴 봤지만 필요한 것과 같은 방법을 볼 수 없었다. –

+0

NSMutableSet에는 실제로 수신기에서 오브젝트를 제거하여 교차로로 변환하는'-intersectSet :'이 있습니다. –

1

두 개의 서로 다른 배열에서 VHS에서 VHS와 VHS를 뺀 것이 필요한 경우 -removeObjectsInArray:을 사용하십시오.

두 배열이 같은 배열에 필요하면이를 정렬하고 ObjC에서 this algorithm을 다시 구현하십시오.

0

동영상 제목 (MergeSort)을 사용하여 두 배열을 정렬 한 다음 두 항목을 병합하고 병합 기능을 수정하여 고유하지 않은 요소를 인쇄합니다.

+0

이것은 내가 생각했던 것과 가깝게 들립니다. 배열을 정렬 (나는 ID가) 다음 두 배열을 동시에 단계, 비교 및 ​​일치 또는 구멍/드문 요소를 찾는 단계. 이 코드를 어디에서 찾을 수 있는지 알고 있습니까? 이것이 병합 정렬이라고 불리우나요? –

+0

예, NergeSort라고합니다. 그물에 많은 예제를 찾을 수 있습니다. 여기에 하나가 있습니다 : http://en.wikibooks.org/wiki/Algorithm_Implementation/Sorting/Merge_sort – bhups