五十九、基础框架(十七)创建 地址簿-7

如果  一本地址簿  有  大量的地址卡片,那么  将  这些地址卡片  按照  字母表顺序  排列  就会带来  不小的方便。我们  可以  轻松地  编写  一项适用于AddressBook这类物件的措施sort。在sort这项措施当中,我们  可以利用  适用于NSMutableArray这类物件的措施sortUsingSelector:。sortUsingSelector:这项措施自己  并不能判断  两个物件的大小或者先后顺序,于是  我们  必须编写  一项可以判断两个物件大小或者先后顺序的措施,并且  将  这个措施的标志  作为参数  传递给  sortUsingSelector:这项措施。sortUsingSelector:这项措施  再  才能  根据  每两个物件的大小或者先后顺序  进行排序。

由于  我们  要对  地址簿中的地址卡片  进行排序,所以  分别  在AddressBook.h这个文件  和  AddressBook.m这个文件中  添加

这行语句  和

这几行语句。

在sort这项措施当中

这行语句  会利用  compareNames:这项措施的名称  生成  一个SEL类型的标志。sortUsingSelector:这项措施  会利用  compareNames:这项措施的标志  来采取  compareNames:这项措施  进而  比较  每两个物件的大小  或者  先后顺序,最后  根据  每两个物件的大小  或  先后顺序  对  一连串的物件  进行排序。

既然  sortUsingSelector:这项措施  要利用  compareNames:这项措施对每两个物件进行比较的结果  才能排序,那么  我们  接下来  要看看  如何编写  compareNames:这项措施。由于  compareNames:这项措施  要比较  两个地址卡片的顺序,所以  我们  要  在AddressCard.h  和  AddressCard.m这两个文件中  分别  添加:

compareNames:这项措施  要对  地址卡片  进行比较,只需要比较  每两张地址卡片中姓名在字母表中的先后顺序  即可。而  每张地址卡片中的姓名  都属于  NSString类型的字符串物件, 恰好  有  一项适用于NSString类型物件的措施  可以比较  两个字符串的先后顺序  叫做  compare:。在compareNames:这项措施当中  我  对  其实施对象中的姓名name  采取了  compare:这项措施,并且  将  其参数中的姓名name  作为参数,从而  对  其实施对象  和  其参数  进行比较。compare:这项措施产生的结果  是  NSComparisonResult类型的常量。常量NSComparisonResult的三个值  分别  表示  升序、降序  和  相同。

接下来  我们  看看  在具体的程序当中,sort这项措施  是否能够  如愿地  工作:

运行  这个程序过后,可以得到  这样地结果:

从程序的运行结果  看来,sort这项措施  的确  像我们所期望的那样  将  地址簿中的卡片  按照字母表顺序  进行了排列。

需要注意的  是  上面排列的顺序  是  升序。如果  要降序排列,我们  需要将compareNames:所产生的结果  进行颠倒  即可,就像  这样:

其中  NSOrderedAscending  和  NSOrderedDescending这两个常量  分别  表示  升序  和  降序。在compareNames:这项措施中,如果  compare:这项措施的结果  是  升序,那么  就将  降序  作为结果  传递回去;如果  compare:这项措施的结果  是  降序,那么  就将  升序  作为结果  传递回去;如果  compare:这项措施的结果  既不是  升序  也不是  降序,那么  就把  表示一致的常量NSOrderedSame  作为结果  传递回去。

再次  运行  这个程序,我们  可以得到  这样的结果:

在这个结果中,我们  可以看到  地址簿中的卡片  已经按照降序  排列了。

另外  有  超过50项措施  我们  可以对  数组物件  实施。下面表格中的措施  适用于  不可修改数组物件,也就是  NSArray类型的物件:

 

措施名称 描述
+(id)arrayWithObjects:obj1,obj2,…nil 创建  一个新的数组物件,新创建的数组物件当中,存储着物件obj1,obj2…等物件
-(BOOL)containObject:obj 判断其实施对象中是否包含物件obj
-(NSUInteger)count 计算出一个数组物件所包含的元素的数量
-(NSUInteger)indexOfObject:obj 计算出物件obj在其实施对象中位于第几个位置
-(id)objectAtIndex:i 将其实施对象中第i个物件读取出来
-(void)makeObjectsPerformSelector:(SEL)selector 对其实施对象中的每个元素采取(SEL)selector所代表的措施
-(NSArray *)sortedArrayUsingSelector:(SEL)selector 根据(SEL)selector所代表的措施比较每两个物件的结果对数组中的物件进行排序,其产生的结果为经过排序了的数组物件
-(BOOL)writeToFile:path atomically:(BOOL)flag 将数组物件写入path所代表的文件,如果(BOOL)flag的值为YES,那么就创建一个临时文件

下面的措施  适用于  可修改数组物件,也就是  NSMutableArray类型的物件

措施名称 表述
+(id)array 创建一个不包含任何元素的数组物件
+(id)arrayWithCapacity:size 创建一个不包含任何元素,且长度为size的数组物件
-(id)initWithCapacity:size 对已经分配了内存地址的数组物件进行初始化,并且将其长度设定为size
-(void)addObject:obj 将物件obj添加到其实施对象的末尾处
-(void)insertObject:obj atIndex:i 将物件obj插入到其实施对象中第i个位置
-(void)replaceObjectAtIndex:i withObject:obj 将其实施对象中第i个位置上的物件替换成物件obj
-(void)removeObject:obj 将其实施对象中的物件obj删除
-(void)removeObjectAtIndex:i 将其实施对象中第i个物件删除
-(void)sortUsingSelector:(SEL)selector 根据(SEL)selector所代表的措施对其实施对象中每两个物件的比较结果进行排序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值