2010-12-07 136 views
3

Whew ...什麼是標題。所以我有一個NSMutableArray被分配了從API調用中獲取的數據。我無法控制API調用響應的結構,我想按照提供的格式對數組進行排序。 (其它解決方案的歡迎,當然)Sort Objective-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;因爲吉爾的第一個最喜歡的數字是1,傑克的是7,莎莉的是68.

回答

2

您可以使用NSSortDescriptorselector屬性在這裏。如果這些對象是它們自己的子類,那麼創建一個選擇器,如-compareFavoriteNumberToObject:,它返回NSComparisonResult。如果對象只是一個NSDictionary,您可以在課程上做一個類別來進行比較。

+1

那麼你是否暗示在我的「顏色」類中我應該創建一個選擇器,例如-compareFavoriteNumberToObject :,它將比較返回NSComparisonResult的兩個「顏色」對象?如果是這樣,我會做這樣的排序數組? [myObjects sortUsingSelector:@selector(compareFavoriteNumberToObject :)]; – 2010-12-07 22:58:06