我知道如何按字母对数组排序,但我想按对象中的流行程度对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
)