2010-12-07 8 views
3

휴 ... 무슨 제목. 그래서 API 호출에서 검색된 데이터가 할당 된 NSMutableArray가 있습니다. 필자는 API 호출 응답의 구조를 제어 할 수 없으며 제공된 형식으로 배열을 정렬하고 싶습니다.정렬 목표 -c 배열이 포함 된 객체가 포함 된 배열

이것은 (간단하게하기 위해) 바보 같은 예입니다 (다른 솔루션은 물론, 환영합니다),하지만 난 정렬 꿔 배열은 다음과 같이 표현 될 수있다 : 내가 알고

 
myObjects = 
array(
    0 => object(
    name => @"Jack", 
    favoriteNumbers => object(
     numbers => array(
     0 => 7, 
     1 => 11, 
     2 => 6 
    ) 
    ) 
), 
    1 => object(
    name => @"Jill", 
    favoriteNumbers => object(
     numbers => array(
     0 => 1, 
     1 => 2, 
     2 => 3 
    ) 
    ) 
), 
    3 => object(
    name => @"Sally", 
    favoriteNumbers => object(
     numbers => array(
     0 => 68, 
     1 => 103, 
     2 => 99 
    ) 
    ) 
) 
) 

 
NSSortDescriptor *sortDescriptor; 
sortDescriptor = [[[NSSortDescriptor alloc] initWithKey:@"name" ascending:NO] autorelease]; 
NSArray *sortDescriptors = [NSArray arrayWithObject:sortDescriptor]; 
NSArray *sortByDurationArray = [myObjects sortedArrayUsingDescriptors:sortDescriptors]; 
// the variable "myObjects" holds the array representation from above 

그러나 어떻게 각 사람이 선호하는 첫 번째 번호로 배열을 정렬하겠습니까?

원하는 결과는 다음 순서로 배열을 정렬합니다. Jill, Jack, Sally; Jill의 첫 번째 즐겨 찾기 번호는 1이므로 Jack 's는 7이고 Sally 's는 68입니다.

답변

2

여기 NSSortDescriptorselector 속성을 사용할 수 있습니다. 이러한 객체가 자신의 서브 클래스 인 경우 NSComparisonResult을 반환하는 -compareFavoriteNumberToObject:과 같은 selector를 만듭니다. 객체가 NSDictionary과 같은 것일 경우 클래스에서 비교를 수행 할 카테고리를 만들 수 있습니다.

+1

그래서 "색상"클래스에서 -compareFavoriteNumberToObject :와 같은 선택기를 만들어야한다고 말하면 NSComparisonResult를 반환하는 두 개의 "색상"개체를 비교할 수 있습니까? 그렇다면 배열을 정렬하기 위해 이렇게할까요? [myObjects sortUsingSelector : @selector (compareFavoriteNumberToObject :)]; –

+0

그래, 그 말이 맞는 것 같아. 엄밀히 말하면'-compareFavoriteNumberWithColor :'로 가겠다. 왜냐하면 어떤 객체도 사용할 수 없기 때문이다. –

관련 문제