黑马程序员-NSArray常用方法及其block 方法妙用小结
NSArray 我们OC 中称其为数组,更加具体的来说,是不可变数组.我们这里说的不可变,是指的 NSArray 在创建之后,就不能在往里边添加新的元素.与之对应的,是它的子类, 即NSMutableArray,可变数组.我们在创建之后,可以在使用过程中,动态的往里边添加新的元素.我们这里主要谈论 NSArray,NSMutableArray 下篇文章中说道.
一. 数组元素包括哪些
数组可以保存的元素范围基本上涵盖了我们中所有的元素类型, UIView,NSString,NSNumber,我们模型类 NSObject等等.但是,数组不能直接保存基本数据类型(int,float等)这些,想要保存基本数据类型的话,我们可以用 NSNUmber 包装或者直接转换成 NSString方式进行存储
当然,并不是一个数组只能存储的元素都是同一个数组,比如,我们可以把 UIView 和 NSString 一起存到统一数组当中.不过这个读取的时候要注意了
二. 创建方法
NSArray 的创建方法有很多种,我们这里列出常用的创建方法,具体如下:
(1)alloc-init或new (这两个方法的具体差别并不是很大,所以当我们的用途仅仅是创建出一个实例对象,不添加数组元素的时候,可以直接 new来代替 alloc-init)
(2)arrayWithObject:创建并且包含一个数组元素. (这个方法在创建出NSArray 实例对象,并且包含一个数组元素)
(3)arrayWithObjects:创建并且包含多个数组元素(这个方法在创建出NSArray 实例对象,并且包含多个数组元素,当然也可以只创建一个代替(2)中的方法,或者直接写 nil 不包含实例对象.)
要特别注意,这个方法要记得加上 nil
(4)@[]:创建并且包含多个数组元素(这个方法和上边(3)方法类似,也可以用于创建并且拥有多个数组元素. )
要特别注意,这里我们不要和创建字典'@{}'搞混
三.数组元素的读取
数组元素的读取分为 block 和 平常的方式,我们一起具体看下,如下:
(1)平常方式1
for循环,这种方法的好处是我们可以获取遍历的数组元素的下边,也就是可以灵活的加 if 判断,根据下边拦截元素,进行一些我们想要的操作. 不过,后边苹果在 NSArray中的block 读取方法中,有一个类似 for 循环,且执行效率更高的方法.我们在下边会提到.
(2)平常方式2
for-in 循环,这种方法有些局限性.前期是数组中保存的都是统一类型的数组元素.而且,这种方式,我们不会获取到数组遍历时候的下标.我们在快速遍历获取数组元素的时候,可以使用这个方法.
(3)block 方法.
enumerateObjectsUsingBlock,这种方法是我们这里提到的三种方法中效率最高的,具体效率比对,大家可以百度查看喝多对比例子.除了效率高之后,enumerateObjectsUsingBlock
可以直接获取到 当前遍历的元素和元素对应的下标.(不用向(1)中需要array2[i]才能得到).是不是很便利呢.
另外,这个方法中还提供了一个 stop 参数,这个参数类似 在 for 循环中写入return或者 break,直接挑出当前的 循环,比如我们下边的例子当中写到的那样.如果 array2遍历完其第二个数组之后,就会停止遍历. 在使用 stop 的时候,格式为: "*stop = YES;",
打印结果如下:
四.数组的排序
(1)sortedArrayUsingSelector:需要指定一个排序的方法来对数组进行排序,这个排序方法,既可以自定义,来实现对排序规则的把控,也可以使用系统自带的排序方法(系统自带的排序方法叫:compare:)
1'sortedArrayUsingSelector + compare:结合系统自带的排序方法compare:进行排序,string 数.
他的输出结果是:
我们可以看出,他并不是比较大小.这里注意我们数组中是 NSString, 而不是int 类型.compare可以比较类型有NSString,NSDate,NSNumber等
我们在看下边这个例子:
输出结果是:
系统自带排序方法compare在这里常用比较字数数组
(2)sortedArrayUsingSelector+自定义比较方法:
假如我们数组中保存的都是Student 模型,我们自定义比较方法 compareStudentName:方法来实现先对姓排序,如果姓相同,再对名字排序
自定义比较方法的实现,在 Student 模型中
(3)block 排序方法 :sortedArrayUsingComparator
在这个方法中,我们可以高效率的很快拿到当前数组对NSNumber 的排序
五.NSArray 的其他方法
(1)componentsJoinedByString,用指定字符串拼接数组中的元素
打印结果如下:
(2)writeToFile和arrayWithContentsOfFile,把文件保存到文件,然后读取
浙公网安备 33010602011771号