2011-05-07 4 views
5

개체의 NSMutableSet이 있습니다. 모든 개체는 분명히 고유하지만 .angle 값 (NSInteger 속성)을 가질 수 있습니다.NSMutableSet에서 동일한 속성 값을 가진 개체 찾기

동일한 .angle 값을 가진 개체가 두 개 이상 있는지 그룹화 한 다음 배열로 그룹화해야합니다.

어떻게 할 수 있습니까?
모든 안내 사항을 높이 평가할 것입니다.

답변

12

사용 자 NSPredicate의 인스턴스는 관심있는 특성을 필터링하는 예를 들면 다음과 같습니다. 자 NSPredicate의 예를 들어

NSSet *dogs = [NSSet setWithObjects: 
       [Dog dogWithName:@"Fido" age:2], 
       [Dog dogWithName:@"Fluffy" age: 3], 
       [Dog dogWithName:@"Spot" age:2], 
       nil]; 

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"age == %d", 2]; 
NSSet *twoYearOldDogs = [dogs filteredSetUsingPredicate:predicate]; 

NSLog(@"%@", twoYearOldDogs); 
+0

감사합니다. – dredful

+0

네, 그게 내가 찾고 있던 것입니다. 고마워요. – devster

0

데이터의 크기에 따라 달라질 수 있습니다. 큰 경우 .angle로 정렬하고 중복을 찾아야 할 수도 있습니다. 간단한 방법은 데이터 세트의 복사본을 만들고, 반복하고, 항목 N에 대해 N + 1을 모두 같은 .angle으로 끝까지 봅니다. 발견되면이 사본 세트에서 해당 사본을 제거하고 출력 집합에 추가합니다.

0

NSMutableArray의 sortUsingFunction : context : 메서드를 사용할 수 있습니다. (비록 당신이 당신의 작업을 더 효율적으로 완료 할 수 정렬)입니다.

NSComparisonResult compare(YourClass *firstObject, YourClass *secondObject, void *context) { 
    if ([firstObject angle] < [secondObject angle]) 
    return NSOrderedAscending; 
    else if ([firstObject angle] > [secondObject angle]) 
    return NSOrderedDescending; 
    else 
    { 
    //Normally here NSOrderedSame is returned. 
    //Put your logic stuff here.i.e. storing object for having common angle. 
    } 
} 

희망이 있습니다.