iOS 集合(NSArray、NSDictionary、NSSet)使用的一些方法介绍

  • 1、遍历

遍历集合的方式由多种,如:for 循环、 for in 快速遍历、NSEnumerator 等。其中基于块(block)的遍历方式比较更加的实用,方便。
1.1经典for循环
在这里插入图片描述
在这里插入图片描述
该遍历使用广泛、操作简单。但对于字典(NSDictionary)、NSSet 的遍历就比较繁琐,
因为字典和 set 是无序的,所以无法根据特定的整数下标来直接访问其中的值,需要
先获取字典中的键或 set 中的所有对象,这样才可以在获取数组上进行遍历,这样会
造成系统额外的开销。
1.2 for in(NSFastEnumeration)快速遍历
在这里插入图片描述
在这里插入图片描述
快速遍历方法实用很简便,效率也很高,但是不能获取当前遍历的下标。
1.3基于快(block)的遍历
数组的遍历(可同时获取数组的元素及对应下标)
在这里插入图片描述
字典的块遍历(block直接把字典的key和value都返回来,不用再写其他繁琐的内容):
在这里插入图片描述
块的遍历可以完美的实现 for 循环的所有功能,可以方便的获取集合中的每一项元素。
提供了循环遍历的参数,NSEnumerationReverse 来实现倒序循环,NSEnumerationConcurrent 用来实现并发遍历。
当使用 NSEnumerationConcurrent 选项时,可以实现 for 循环和快速遍历无法轻易实现的并发循环功能,系统底层会通过 GCD 处理并发事宜,这样可以充分利用系统和硬件资源,达到最优的遍历效果。
遍历执行的 block 会分配在多核 CPU上执行,对于耗时的任务来说很值得这么做。重要的是,对于遍历的外部是保存同步的,即需要在 block 遍历都完成后才继续执行下一行

  • 2、数组内容的查找

相比于使用遍历查找需要的内容,使用 NSPredicate 进行条件查找,显得更加方便。
在 Cocoa 框架中 NSPredicate 用于查询,原理和用法都类似于 SQL 中的where。常用的
比较内容如下:
– 比较运算符 >, < == >=, !=, 还可以跟逻辑运算符一起使用: &&、||、AND、OR
eg: NSPredicate *predicate = [NSPredicate predicateWithFormat:@“age > 20”];
predicate = [NSPredicate predicateWithFormat:@“name > ‘abc’ && age > 10”];

– 范围运算符: IN、BETWEEN
eg: @“address IN {‘shanghai’, ‘beijing’}”

– 字符串本身: SELF 只针对字符数组起作用
eg: @“SELF == ‘APPLE’”

– 字符串相关: BEGINSWITH、ENDSWITH、CONTAINS
eg: @“name CONTAIN [cd] ’ang’” // 包含某个字符串
@“name BEGINSWITH [c] ‘sh’” // 以某个字符串开头
@“name ENDSWITH [d] ‘and’” // 以某个字符串结尾
注: [c] 不区分大小写
[d] 不区分发音符号,即没有重音符号
[cd] 即不区分大小写,也不区分发音符号

– 通配符:LIKE
eg: @“name LIKE [cd] ‘er’” // * 代表通配符
@“name LIKE [cd] ‘???er*’”

– 正则表达式:MATCHES
eg: NSString *regex = @”^A.+e$”; // 以 A 开头,e 结尾
@”name MATCHES %@”, regex

实际使用例子:
eg1: 查询数组中的字符串
在这里插入图片描述
eg2:查询数组中符合条件的模型对象
在这里插入图片描述
在这里插入图片描述
其他情形,可按照给出的示例进行验证使用。

备注:本文整理于2016年11月(Q),现将本地文档网络化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值