2010-04-05 5 views
0

다음과 같은 문제점이 있으며 해결 방법을 찾을 수 없습니다. Person 객체 (NSDictionary, 2 키 : 이름, 나이)가 포함 된 NSSet이 있습니다. 때로는 Person 객체의 NSArray를 얻었고 NSSet에 NSArray를 추가하고 싶지만 중복 된 것을 필터링하고 싶습니다. 나는 NSPredicates를 사용할 수 있다고 생각하지만 문서를 읽는 중이고 이미 NSSet에있는 것을 기반으로 배열 내용을 필터링하기 위해 NSPredicate를 포맷해야하는 것을 이해할 수 없습니다.사용자 지정 개체가있는 NSPredicates

그래서 5 개의 사용자 지정 개체가있는 NSSet이 있고 6 개의 개체가있는 NSArray가 있지만 그 중 3 개가 NSSet에 이미 있고 필터를 제거하려고합니다. String, Integer 등과 같은 기본 객체로 무엇을해야하는지 이해하지만 더 복잡한 사용자 정의 객체로 작업을 확장하는 방법을 알지 못합니다.

나는 내 문제로 충분히 명확했으면 좋겠다. 어떤 출발점, 예제 또는 조언을 많이 주시면 감사하겠습니다.

감사합니다.

답변

0

이미 변경 가능 세트가있는 경우 실제로 특별한 작업을 수행 할 필요가 없습니다. 같은 시점에 같은 Person 인스턴스를 얻는다면, addObject :는 그것을 무시할 것이다. 두 객체가 같은 인스턴스인지 아닌지 "평등"이라는 다른 의미가 있다면 그 객체를 처리해야합니다. 그러나 새 객체가 isEqual에 대해 YES를 반환하면 addObject는 이미 객체를 무시할 것입니다. 그것을 세트에 넣으십시오.

+0

예, 맞습니다. 일어날 수 있지만 그렇지는 않습니다. 나는 조금 더 문제를 조사했다. NSArray 5 크기 {1, 0, 3, 2, 5, 4}의 NSArray를 추가하려고하면 5 개의 정수 {0, 1, 2, 3, 4, 5}를 말할 수 있습니다. 같은 순서이지만 다른 순서로 NSSet을 사용합니다. 내 isEqual 호출을 테스트하고 올바르게 작동합니다. 이 행동을하는 이유는 무엇입니까? –

+0

배열의 각 항목을 추가하십시오. NSSet은 객체에서 작동하기 때문에 단순히 어레이에 대한 참조를 세트에 추가하는 것입니다. –

+0

나는 진짜 문제를 발견했습니다. 해시 메서드를 재정의하지 않았고 NSSets 메서드는 개체를 평가하는 데에도 개체의 해시 코드를 사용합니다. 이제 동일한 객체에 대해 동일한 해시 코드를 만드는 방법을 찾아야합니다. 나중에 솔루션을 게시하겠습니다. –

관련 문제