我知道如何按字母对数组排序,但我想按对象中的流行程度对NSMutableArray进行排序。想象一个包含以下对象的数组:



一种
C


一种


我想按受欢迎程度对这些对象进行排序,并创建一个像这样的数组:





一种
一种
C


是否有一个好的快速方法来做到这一点?也许是NSSortDescriptor的钥匙? (找不到)

谢谢

最佳答案

简而言之,为了简洁起见,我对数组文字使用了新语法。

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[])
{

    @autoreleasepool {
        NSArray *ar = @[@"B", @"A", @"C", @"B", @"B", @"A"];
        NSCountedSet *countedSet = [NSCountedSet setWithArray:ar];
        NSArray *sorted = [ar sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
            NSInteger diff = [countedSet countForObject:obj1] - [countedSet countForObject:obj2];
            if (diff < 0)
                return NSOrderedDescending;
            else if (diff > 0)
                return NSOrderedAscending;
            else
                return NSOrderedSame;
        }];
        NSLog(@"%@", ar);
        NSLog(@"%@", sorted);
    }
    return 0;
}


输出量

2012-05-08 07:25:18.465 Sort[20434:303] (
    B,
    A,
    C,
    B,
    B,
    A
)
2012-05-08 07:25:18.468 Sort[20434:303] (
    B,
    B,
    B,
    A,
    A,
    C
)

10-08 02:43