클래스 Event가 있고 그것이 action (NSString) 및 date (NSDate)의 두 가지 속성이 있다고 가정합니다.해당 객체의 속성을 비교하여 배열에서 중복을 제거합니다.
그리고 이벤트 객체의 배열이 있다고 가정합니다. 문제는 "날짜"속성이 일치 할 수 있다는 것입니다.
중복을 제거해야합니다. 동일한 날짜의 2 개의 다른 객체가 중복됨을 의미합니다.
문자열이나 nsdates의 배열에서 중복을 제거 할 수 있으므로 비교하기 쉽습니다. 그러나 복잡한 물체를 어떻게 처리 할 것인가?
내가 지금까지 한 일을 묻지 마라. 내 마음에 오는 유일한 것은 버블 정렬이다. 하지만 초보자 용 솔루션이고 느리다..
매우 도움이되는 매우 큰 도움이됩니다 (링크, tuts, 코드).
미리 감사드립니다.
편집 dasblinkenlight에
덕분에, 나는 사용자 정의 방법을 만든 : 여기
- (NSArray *)removeDuplicatesInArray:(NSArray*)arrayToFilter{
NSMutableSet *seenDates = [NSMutableSet set];
NSPredicate *dupDatesPred = [NSPredicate predicateWithBlock: ^BOOL(id obj, NSDictionary *bind) {
YourClass *e = (YourClass*)obj;
BOOL seen = [seenDates containsObject:e.propertyName];
if (!seen) {
[seenDates addObject:e.when];
}
return !seen;
}];
return [arrayToFilter filteredArrayUsingPredicate:dupDatesPred];
}
YourClass
객체가 속한 클래스의 이름을, 그리고 propertyName
은이다 당신이 비교하려고하는 객체의 속성.
self.arrayWithObjects에 YourClass의 개체가 있다고 가정합니다.
을 채우기 후,
self.arrayWithObjects = [self removeDuplicatesInArray:self.arrayWithObjects];
를 사용하면 모든 작업이 완료된다.
모든 크레딧은 dasblinkenlight입니다. 건배!
어레이에있는 이벤트의 이벤트 객체를 다른 날짜와 함께 추가하는 것을 방지하기 위해 aproach를 사용하면 작동합니까? – LuisEspinoza
Naah, 배열은 이미 거대한 JSON에서 채워집니다. 과정이 너무 복잡해서 나중에 중복을 제거하는 것이 더 쉽다고 생각합니다. –
NSArray의 여러 sortedArray ... 함수 중 하나를 사용하여 날짜별로 배열을 정렬 한 다음 정렬 된 배열을 단계적으로 따라 가면서 새 NSMutableArray로 복사하고 마지막 NSArrayArray와 동일한 날짜를 갖는 모든 요소를 건너 뜁니다. . –