系统自带的几种数组排序

1.sortedArrayUsingComparator

上面的参数(obj1、obj2)就是我们将要做比较的对象。block返回的结果为NSComparisonResult类型来表示两个对象的顺序。

ModelTest *model1 = [[ModelTest alloc] initWithRank:@"2" andName:@"第二"];
ModelTest *model2 = [[ModelTest alloc] initWithRank:@"10" andName:@"第一"];
ModelTest *model3 = [[ModelTest alloc] initWithRank:@"3" andName:@"第三"];
NSArray *arr = @[model1,model2,model3];

NSArray *sortedArr = [arr sortedArrayUsingComparator:^NSComparisonResult(id  _Nonnull obj1, id  _Nonnull obj2) {
    NSInteger rank1 = [[obj1 valueForKey:@"MTrank"] integerValue];
    NSInteger rank2 = [[obj2 valueForKey:@"MTrank"] integerValue];
    //降序
    return [@(rank2) compare:@(rank1)];
}];

结果输出:


系统自带的几种数组排序_第1张图片
第一种排序

2.sortedArrayUsingSelector

当然,我们也可以定义自己的方法进行两个对象做比较,并将该方法用于数组排序。comparator消息会被发送到数值中的每个对象中,并携带数组中另外的一个对象当做参数。
此方法一定要写到model类里面。
此方法一定要写到model类里面。
此方法一定要写到model类里面。
如下代码所示:

-(NSComparisonResult)compare:(ModelTest *)otherModel
{
    NSInteger rank1 = [self.MTrank integerValue];
    NSInteger rank2 = [otherModel.MTrank integerValue];

    //升序
    return [@(rank1) compare:@(rank2)];
}

3.sortUsingDescriptors

适合元素是dict类型,initWithKey既是dict key.

NSMutableArray *regions = [NSMutableArrayarray];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptoralloc] initWithKey:@"name"ascending:YES];
NSArray *sortDescriptors = [NSArrayarrayWithObject:sortDescriptor];
[regionssortUsingDescriptors:sortDescriptors];

你可能感兴趣的:(系统自带的几种数组排序)