2013-07-05 112 views
1

我有一个数组数组。子数组包含对象。我怎样才能排序父数组中的这些子数组,以便他们排序的第一个数组是包含最多的对象到最后一个包含最少的对象的子数组?根据子数组对数组进行排序count

回答

4

对于这种情况,就足以实现一个简单的比较:

NSArray* sortedArray= [array sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) 
{ 
    return [obj2 count] - [obj1 count]; 
}]; 

进一步解释

NSComparisonResult是这样的枚举:

enum { 
    NSOrderedAscending = -1, 
    NSOrderedSame,    // 0 
    NSOrderedDescending  // +1 
}; 

所以减去两个数组数你得到正确的顺序,避免写出通常无聊的if-then-els即对于可读性,不要混淆想法初学者我添加了长版在这里:

而且使用与@count收集运营商一种描述

NSArray* sortedArray= [array sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) 
{ 
    if([obj1 count] > [obj2 count]) 
     return NSOrderedAscending; 
    if([obj1 count] < [obj2 count]) 
     return NSOrderedDescending; 
    return NSOrderedSame; 
}]; 

另类优雅:

NSSortDescriptor* descriptor= [NSSortDescriptor sortDescriptorWithKey: @"@count" ascending: NO]; 
NSArray* sortedArray= [array sortedArrayUsingDescriptors: @[ descriptor ]]; 
+0

这也可以使用自定义排序描述符 – uchuugaka

+0

您不需要自定义排序描述符。只是'[NSSortDescriptor sortDescriptorWithKey:@“count”升序:YES]'。 –

+0

@KenThomases关键应该是@“@ count”,顺序不应该是升序,他希望他们从较长的一个开始排序。 –

相关问题