iOS 数组排序

1、NSSortDescriptor排序
概述:

数组是有序容器,因此集合中只有数组才能排序。该类能够方便的实现对数组中的对象进行升序或者降序的排序。它可以把元素的某个属性作为key进行升序或降序的排序,每个NSSortDescriptor对象就是一个排序条件。

NSSortDescriptor初始化方法
- (instancetype)initWithKey:(NSString *)key ascending:(BOOL)ascending;

key:按照数组中对象的哪个属性进行排序,如果数组中存放的是能够直接排序的对象(比如:字符串),直接使 @"self" 或者 nil 即可;如果存放的是自定义类的对象,使用想要进行排序的属性名即可(比如:想按照Person类的name进行排序, 使用 @"name" 作为参数)。ascending:排序的标志,是升序还是降序。 YES - 升序, NO - 降序。

NSSortDescriptor创建
NSSortDescriptor *sortDes1 = [[NSSortDescriptor alloc] initWithKey:@"self" ascending:YES]; // 升序
NSSortDescriptor *sortDes2 = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:NO]; // 降序

① 不可变数组排序

// 基本数据类型不可变数组
array = [array sortedArrayUsingDescriptors:@[sortDes1]];
NSLog(@"%@", array);
// 自定义对象不可变数组
// 按照名字排序
personArray = [personArray sortedArrayUsingDescriptors:@[sortDes2]];
NSLog(@"%@", personArray);

② 可变数组排序

// 基本类型可变数组
[mArray sortUsingDescriptors:@[sortDes1]];
NSLog(@"%@", mArray);
// 自定义对象可变数组
// 按照名字排序
[personMArray sortUsingDescriptors:@[sortDes2]];
NSLog(@"%@", personMArray);
2、使用数组中 两个元素比较的方法名 进行排序

① 不可变数组排序:(排序结果生成新数组, 原数组无改变)

- (NSArray *)sortedArrayUsingSelector:(SEL)comparator;

注:SEL类型的参数comparator:需要传入一个返回结果是NSComparisonResult的方法名。

// 可变数组(基本数据类型)
[mArray sortUsingSelector:@selector(compare:)];
NSLog(@"%@", mArray);
// 可变的数组(自定义类型的对象)
// 按照名字排序
[personMArray sortUsingSelector:@selector(compareByName:)];
NSLog(@"%@", personMArray);

② 可变数组排序:(直接对原数组操作,无新数组生成)

- (void)sortUsingSelector:(SEL)comparator;

注:SEL类型的参数comparator:需要传入一个返回结果是NSComparisionResult的函数

// 可变数组(基本数据类型)
[mArray sortUsingSelector:@selector(compare:)];
NSLog(@"%@", mArray);
// 可变的数组(自定义类型的对象)
// 按照名字排序
[personMArray sortUsingSelector:@selector(compareByName:)];
NSLog(@"%@", personMArray);

Person类中compareByName方法:

// 比较方法的声明
- (NSComparisonResult)compareByName:(Person *)anotherPerson;
// 比较方法的实现
- (NSComparisonResult)compareByName:(Person *)anotherPerson
{
return [self.name compare:anotherPerson.name];
}

上面方法排完序后返回的数组英文和汉字是分开的,所以如需将汉字也排入英文中,请参考:https://github.com/lingxuemy/XCompareString.git

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 数组可对其中包含的元素进行排序。 在排序前,我们需要定义一个Model类,将Model类对象添加至数组中。 定义一...
    SkyMing一C阅读 11,088评论 0 15
  • 日常项目中偶尔会有用到要对接收到数据进行排序操作。如果采用遍历等方法来进行不免写大量代码而且复用性很低,在这里记录...
    一路向北客阅读 3,223评论 0 1
  • 数组元素类型 假设我们这个数组里面的元素是一个 model 类型,比如 CHSAssetGroup,其CHSAss...
    乒什么乓阅读 4,153评论 0 8
  • Pre:很多文章对于SEL排序讲解太过含糊,特写此文讲述清楚。 官方提供了几个api进行数组排序操作,开发者只需提...
    圆脸黑猫警长阅读 24,183评论 0 22
  • 1.倒序 在ios开发的过程中,经常需要使数组中的数据倒叙排列!比如在tableView显示数据的时候需要使数据倒...
    ChinaGoodStaff阅读 32,082评论 5 35

友情链接更多精彩内容