1

我有一个数组数组。子数组包含对象。如何对父数组中的这些子数组进行排序,以便它们以包含最多对象的第一个数组到包含最少对象的最后一个子数组进行排序?

4

1 回答 1

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 ]];
于 2013-07-05T23:58:03.737 回答