- 简单排序
- 利用block语法进行排序
- 高级排序
- 拓展-分组问题
Objective-C对数据的操作可谓是非常用心,早已经封装好了很多方法等着我们去挖掘。其中对排序就是其中之一。本文是基于前人的基础上进行完善和加上自己的一些见解。
|
|
简单排序
sortedArrayUsingSelector:
通过指定方法对数组元素进行排序。有一点需要记住,就是不管你自定义的方法是什么,都必须最后返回一个NSComparisonResult
类型用于决定元素的排列原则。一般用于对字符串数组进行排序,因为字符串有自带的对比方法compare:
。如果想对其他类型元素的数组进行排序就需要我们自己自定义排序方法。
例如:
|
|
利用block语法进行排序
sortedArrayUsingComparator:
假如我们有一个存储了NSDate类型的数组需要进行排序,那么我们可以通过compare:
方法进行排序。或者如果想自定义排序原则也可以使用如下方式:
|
|
假如我们有一个存储了NSDate类型的数组需要进行排序,那么我们可以通过此方法进行排序。
|
|
高级排序
sortedArrayUsingDescriptors:
& sortUsingDescriptors:
前者带返回值,是NSArray的方法,返回值中的数组是排好序的数组
后者不带返回值,是NSMutableArray的方法,是对当前数组自己排序
该方法是根据用户的描述器(Descriptor)进行排序。可能这样说有点抽象,我们直接上代码解释:
假设我们有Person类,Car类。需要对Person进行特定条件的排序,排序的原则就是优先根据姓名排序,用户名相同时,再根据年龄排序,年龄也相同时,再按照车进行排序。
Car类
|
|
Person类
|
|
排序方法的实现
|
|
拓展-分组问题
假如我们需要对字典(或对象)
数组里面,根据字典(或对象)
元素的某个键值(或属性)
进行分组。分组的思路无非就是将某个键值(或属性)
相同的字典(或对象)
放在一起。那么如何做到快速分组呢?这里就要引入一个新的类型NSMutableSet
、NSSet
该类型具有无序的,不重复的特性(保证数据的唯一性)。当插入相同的数据时,不会有任何效果。从内部实现来说是hash表。
例如:有一个Model类,需要根据Model里面的exchangeShortTime字段进行分组
Model类
|
|
分组的实现
|
|
大功告成!排序分组就讲到这里。如果后面还有更多相关知识点会补充上。
再一次感谢您花费时间阅读这篇文章!
微博: @Danny_吕昌辉
博客: SuperDanny