数组的几种排序法

<1>描述:字符串对象都可以排序
// 创建描述对象就是对数组排序的,它可以把数组中元素的某个属性作为key 进行升序或者降序的排列,每一个NSSortDescriptor描述就是一个排序条件
// 描述排序其实就是可以按照条件去升降排序
// key:就是你要排序的对象
// ascending:是升序还是降序

//<1>创建数组
NSMutableArray *ms = [[NSMutableArray alloc]initWithObjects:@"kkk", @“abg”,nil];

//<2>创建描述对象:如果说我们这个数组中存储是一个个字符串,那么我们这块的key值就应该写成nil或者@“self”,如果是对象则写成对象的属性即可

NSSortDescriptor *mm = [[NSSortDescriptor alloc]initWithKey:@"self" ascending:YES];

NSSortDescriptor *nn = [[NSSortDescriptor alloc]initWithKey:@"name" ascending:YES];

//<3>使用描述方法满足以上描述对象的条件对上面的数组进行排序
[ms sortUsingDescriptors:@[mm]];
NSLog(@"%@",ms);

<4>可变数组的描述方法是[数组名 sortUsingDescriptors:@“ 描述对象的名字 ”]

<5>不可变数组的描述方法是,首先得创建一个新的数组来承接
NSArray *array = [数组名 sortedArrayUsingDescriptors:@“ 描述对象的名字 ”]

<2>compare使用这个方法给数组排序
//<1>创建数组
NSArray *kkl = @[@“4”,@"3",@"5",@"1"];

//<2>数组调用compare排序方法,这个方法默认是升序的,
[kkl sortedArrayUsingSelector:@selector(compare:)];

<3>我们也可以重写这个方法,按照自己的条件进行排序
//按姓名进行对比:compare:方法是字符串拥有的方法

自定义方法比较方法- (NSComparisonResult)compareByName: (Student *)other{
return [self.name compare:other.name];//因为属性是个字符串,所以在这块可以用compare直接比较,然后返回比较结果就行了,

}

//按年龄进行对比

  • (NSComparisonResult)compareByAge: (Student *)other{
    if (self.age > other.age) {//基本类型对比的话就是直接对比的
    return 1;
    }else if (self.age < other.age){
    return -1;
    }else{
    return 0;
    }
    }

枚举排序:

你可能感兴趣的:(数组的几种排序法)