2017-12-25 7 views
0

도와주세요. 나는 그것에 사용자 지정 개체와 NSArray 있습니다. 예를 들어 Person 인 경우 'Mark'라는 이름을 가진 사람이 항상 끝에 있어야합니다. 그것은 'sortUsingFunction'의 도움으로 그것을 할 수 있습니까?NSArray sortUsingFunction 사용자 정의 객체가 항상 끝에 있습니다

static NSInteger compareFunction(id item1, id item2, void *context) 
{ 
    Person *pItem1 = (Person *)item1; 
    Person *pItem2 = (Person *)item2; 

    if ([pItem1.name isEqual:@"Mark"]) 
    { 
     return NSOrderedDescending; 
    } 
} 

참고 : 나는 그런 식으로 뭔가를 생각, 여기 정렬 함수가 sortUsingFunction, 다른 기능이 있어야한다.

답변

0

예, 귀하의 아이디어는 가능합니다. 다음은 테스트 된 예제입니다.

NSArray *names = @[@"John",@"Mark",@"Sandy"]; 
NSArray *markEndArray = [names sortedArrayUsingComparator:^NSComparisonResult(NSString *_Nonnull obj1, NSString *_Nonnull obj2) { 
    if ([obj1 isEqualToString:@"Mark"]) { 
     return NSOrderedDescending; 
    } 

    return [obj1 compare:obj2]; 
}]; 

NSLog(@"%@",markEndArray); 

//Output:  
    John, 
    Sandy, 
    Mark 
0

윤첸의 버전이 완전히 작동하지 않습니다. 실패 다음과 같은 이름으로 시도 :

NSArray *names = @[ 
    @"John", 
    @"Noah", 
    @"Liam", 
    @"Mason", 
    @"Jacob", 
    @"William", 
    @"Ethan", 
    @"James", 
    @"Alexander", 
    @"Michael", 
    @"Mark", 
    @"Benjamin", 
    @"Elijah", 
    @"Daniel", 
    @"Aiden", 
    @"Logan", 
    @"Matthew", 
    @"Lucas", 
    @"Jackson", 
    @"David", 
    @"Oliver", 
    @"Jayden", 
    @"Sandy" 
]; 

잘못된 결과 :

Aiden, 
Alexander, 
Benjamin, 
Daniel, 
David, 
Elijah, 
Ethan, 
Jackson, 
Jacob, 
James, 
Jayden, 
John, 
Liam, 
Logan, 
Lucas, 
Matthew, 
Oliver, 
Sandy, 
Mark, 
Mason, 
Michael, 
Noah, 
William 

당신이처럼 확장 할 수 있습니다

NSArray *markEndArray = [names sortedArrayUsingComparator:^NSComparisonResult(NSString *_Nonnull obj1, NSString *_Nonnull obj2) { 
    if ([obj1 isEqualToString:@"Mark"]) { 
     return NSOrderedDescending; 
    } else if ([obj2 isEqualToString:@"Mark"]) { 
     return NSOrderedAscending; 
    } else { 
     return [obj1 compare:obj2]; 
    } 
}]; 

것은 그 다음은 완벽하게 잘해야합니다!

관련 문제