我有一个数组数组。子数组包含对象。如何在父数组中对这些子数组进行排序,以便它们使用第一个数组进行排序,第一个数组是包含最多对象的数组,直到包含最少对象的最后一个子数组?
答案 0 :(得分: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-else。为了便于阅读并且不要将想法与初学者混淆,我在这里添加了长版:
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;
}];
替代
对 @count 集合运算符使用排序描述符也很优雅:
NSSortDescriptor* descriptor= [NSSortDescriptor sortDescriptorWithKey: @"@count" ascending: NO];
NSArray* sortedArray= [array sortedArrayUsingDescriptors: @[ descriptor ]];