2011-04-29 53 views
1

我有一個包含嵌套NSArrays的NSArray。我正在尋找一種方法根據嵌套數組的對象數按升序對父數組進行排序。因此,如果[array1 count]是4,[array2 count]是2和[array3 count]是9,我會得到:數組2,數組1,ARRAY3 ...如何按陣列數排序嵌套NSArrays的NSArray?

回答

9

有一些解決方案,其中之一是:

NSSortDescriptor *sd = [NSSortDescriptor sortDescriptorWithKey:@"@count" 
                ascending:YES]; 
NSArray *sds = [NSArray arrayWithObject:sd]; 
NSArray *sortedArray = [array sortedArrayUsingDescriptors:sds]; 
+0

@Sam事實上,您可以隨時使用「@ count」收集操作符爲符合KVC的集合。 – 2011-04-30 00:22:29

+0

啊,我的道歉。我沒有意識到/誤讀了你的代碼。很酷! – Sam 2011-04-30 00:24:54

+0

工作的很好!..我之前嘗試了這個問題,但我正在使用'@「count」'作爲鍵,它正在崩潰......這是什麼祕密'@「@ count」'??? – KDaker 2011-04-30 11:26:09

1
static NSInteger MONSortObjectsAscendingByCount(id lhs, id rhs, void* ignored) { 
/* error checking omitted */ 
    const NSUInteger lhsCount = [lhs count]; 
    const NSUInteger rhsCount = [rhs count]; 

    if (lhsCount < rhsCount) { 
     return NSOrderedAscending; 
    } 
    else if (lhsCount > rhsCount) { 
     return NSOrderedDescending; 
    } 
    else { 
     return NSOrderedSame; 
    } 
} 

/* use if mutable, and you wnat it sorted in place */ 
- (void)sortUsingFunction:(NSInteger (*)(id, id, void *))compare context:(void *)context; 

/* else use */ 
- (NSArray *)sortedArrayUsingFunction:(NSInteger (*)(id, id, void *))compare context:(void *)context; 
+1

名稱不是以「MON」開頭的函數?你是誰,你對賈斯汀做了什麼? – 2011-04-30 00:20:41

+0

ugggghhhhhhhhhh !!!!!!! = p賈斯汀今天頭痛,並且構建完成。感謝您指出 - 我已經修復了它=) – justin 2011-04-30 00:29:46