OC第六节 遍历集合、数组排序
1、遍历的⽅式?for、枚举器、forin。
①.for循环同C语言,循环条件是集合的元素个数或键值对个数,无序的集合要先转换成数组在根据下标遍历
②.枚举器 NSEnumerator
objectEnumerator (reverseObjectEnumerator) 创建枚举器(反向枚举器)
nextObject 与while循环连用,遍历集合
③. for … in :快速枚举,是在NSEnumerator的基础上封装的更加方便的快熟便立即和元素的方式,格式如下:
for (<#type *object#> in <#collection#>) {
<#statements#>
}
type *object: type * 代表从集合中获取到的对象类型
object 只是一个名称,只需要满足变量名命名法则即可
collection 代表遍历的集合
statements 遍历中需要执行的操作
for in 遍历注意事项:
for in 遍历可以使用嵌套,一般在字典中可以用到,先遍历key值,在value值里如果是集合,可以遍历集合元素
for in 遍历相当与枚举器,所以在遍历时不能修改值,只能先用其他东西提取出来然后再赋值回去
2、三者的区别?
①. for⽤于知道容器中的对象个数
②. 枚举器,通常与while循环连⽤,nextObject只要能获取到对象,就继续执⾏枚举,直到空为⽌
③. forin内部封装了枚举器,forin和枚举器在遍历时不允许改变集合的容量。
3、使用NSSortDescriptor进行数组排序三步走
1、创建一个用来排序的数组
2、创建一个排序条件,也就是一个NSSortDescriptor对象,初始化中需要指定按照数组中对象中什么属性值排序,升序或者降序
// 第一个参数为数组中对象要按照什么属性来排序(比如自身,姓名,年龄)
// 第二个参数为指定排序方式是 升序还是 降序
3、数组根据排序条件进行排序,得到一个排序之后的数组(如果是可变数组,不会生成新数组,还是本身)
4、创建⼀个NSSortDescriptor对象的方法(initWithKey方法)
①. sortedArrayUsingDescriptor:@[NSSortDescriptor对象,即排序方式]
②. sortedArrayUsingDescriptors 后面可以接多个NSSortDescriptor对象,对象之间哪个在前那个的优先级更高。
③. sortedArrayUsingSelector:SEL(@selector(⽅法名)) 必须先要一个排序方法才能用
注: // SEL类型的参数 只能用 @selector(方法名) 给定。
// 如果数组使用这个方法进行排序,此方法必须是返回值为NSComparisionResult。
// 数组排序 需要传入的方法参数 要的是方法的返回值,根据方法的返回值决定到底是按照升序排列还是降序排列。
5、猜测在默认排序方法(compare: )的实现
/* 冒泡排序内部
if (表达式 > 0) {
交换;
} */
//方法的返回值为1,说明前面的大于后面的,降序,那么表达式的值为1,进行交换后前面的就小于后面的了,所以就成了升序,compare: 方法就是默认升序的。
//方法的返回值为2,说明前面的小于后面的,升序,那么表达式的值为-1,不会进行交换,那么还是升序。