OC NSArray的排序问题

1.关于NSArray的排序问题,首先想到的是不是冒泡排序,插入排序.......

oc中的NSArray有一种更简单的方式:

例如:

NSArray *stringArray=[NSArray arrayWithObjects:@"abc1 ",@"abc21",@"abc12",@"abc03",@"abc04", nil];

NSComparator sotrBlock=^(id string1,id string2){

    return [string1 compare:string2];

};

NSArray *sortArray=[stringArray sortedArrayUsingComparator:sotrBlock];

得到的sortArray就是排序后的数组

2.那么问题来了,(高级排序)

如果有一个Person类里有另外一个类的变量,比如说Person类除了name,age变量,还有一辆车Car类型,Car类里有个name属性。对Person对象进行排序,有这样的要求:按照Car的name排序,如果是同一辆车,也就是Car的name相同,那么再按照年龄进行排序,如果年龄也相同,最后按照Person的name进行排序。

//第一步把person加入数组

 NSArray *array = [NSArray arrayWithObjects:p1,p2,p3,p4,p5, nil];//p1....p5为创建的person对象

//第二部//我这里是:首先按照年龄排序,然后是车的名字,最后是按照人的名字

NSSortDescriptor *carNameDesc = [NSSortDescriptor sortDescriptorWithKey:@"car.name" ascending:YES];//构建排序描述器

NSSortDescriptor *personNameDesc = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES];

NSSortDescriptor *personAgeDesc = [NSSortDescriptor sortDescriptorWithKey:@"age" ascending:YES];

NSArray *descriptorArray = [NSArray arrayWithObjects:personAgeDesc,carNameDesc,personNameDesc, nil];

//把排序描述器放进数组里,放入的顺序就是你想要排序的顺序

 NSArray *descriptorArray = [NSArray arrayWithObjects:personAgeDesc,carNameDesc,personNameDesc, nil];

 NSArray *sortedArray = [array sortedArrayUsingDescriptors: descriptorArray];

sortedArray就是排序后的数组

是不是感觉挺简单的................ 

原文地址:https://www.cnblogs.com/hualuoshuijia/p/4972602.html