Object-C基础(13)——字典与谓词
来源:互联网 发布:金字塔 插件编程 编辑:程序博客网 时间:2024/06/05 15:26
NSDictionary与NSMutableDictionary(字典)
它包含的元素不是单个元素,它的元素总是key-value成对出现。
对于NSDictionary而言,它的key是不允许重复的,但value则可以重复。而且程序可以根据key来查找NSDictionary中的value。
包括的它的count值,都是按“key-value对”来算。
NSDictionary的key是无序的,程序无法保证key的添加顺序。
创建NSDictionary
- 用初始化方法或者类方法来创建NSDictionary。
- 简化语法。
判断NSDictionary的元素:
- count
- allKeys:获取所有key组成NSArray
- - (NSArray*)allKeysForObject:(id)anObject:获取某个value对应的所有的key。
- 最常用:就是根据key,获取value。支持使用下标语法。
遍历字典:
-(void)enumerateKeysAndObjectsWithOptions:(NSEnumerationOptions)opts
usingBlock:(void (^)(id key,
id obj,
BOOL *stop))block :用代码块遍历
- keyEnumerator:获取所有key组成的NSEnumerator。
- objectEnumerator:获取所有的value组成的NSEnumerator。
NSEnumerator可用于遍历。
排序(排序结果是返回所有key按顺序排列后的NSArray- 用value对key排序)
- (NSArray*)keysSortedByValueUsingSelector:(SEL)comparator:用value的指定方法对key进行排序。
- (NSArray*)keysSortedByValueWithOptions:(NSSortOptions)opts
usingComparator:(NSComparator)cmptr 用代码块根据value对key进行排序。
过滤(返回符合条件的key所组成NSSet)
- (NSSet*)keysOfEntriesWithOptions:(NSEnumerationOptions)opts
passingTest:(BOOL(^)(id key,
id obj,
BOOL *stop))predicate
NSMutableDictionary,可变版本
此处的可变体现为:程序可以添加、删除、替换它的key-value对
- (void)setObject:(id)anObjectforKey:(id<NSCopying>)aKey: 添加或替换。
- (void)setObject:(id)objectforKeyedSubscript:(id<NSCopying>)aKey:支持下标行为。
-(void)addEntriesFromDictionary:(NSDictionary *)otherDictionary:批量添加多个key-value对。
如果key重复,就会发生替换。
- (void)removeObjectForKey:(id)aKey:根据key来删除对应的key-value对。
- (void)removeObjectsForKeys:(NSArray*)keyArray:同时删除多个key-value对。
- (void)removeAllObjects 删除所有。
自定义类作为NSDictionary的key。(高级知识)
如果自定义类作为NSDictionary的value,那没有任何需要特别注意的地方。
自定义类要作为NSDictionary的key时,必须满足如下要求:
- 该类必须遵守NSCopying协议,也必须实现该协议中的copyWithZone:方法。
- 必须正确地重写isEqual:和hash两个方法。
只要两个key通过isEqual:比较返回YES,且hash方法返回值也相等,NSDictionary就会认为这两个key是重复的。
结论:当程序把对象作为NSDictionary的key存入时,实际上NSDictionary并未真正存入该key,
会先将该key会被复制一份副本,实际存入NSDictionary的只是它的副本。
谓词(NSPredicate)
所谓谓词,其实就代表了一个条件,程序就可以根据谓词来进行数据过滤(检索)。
(1)使用类方法创建一个NSPredicate。
(2)直接把NSPredicate传给其他方法(因为有些方法本身就需要NSPredicate作为参数)
或者evaluateWithObject:、evaluateWithObject:substitutionVariables: 来计算谓词的结果。
实际上,就是验证传给evaluateWithObject:的对象是否满足谓词的条件。
谓词过滤集合:
- (NSArray*)filteredArrayUsingPredicate:(NSPredicate *)predicate
-(void)filterUsingPredicate:(NSPredicate *)predicate
-(NSSet *)filteredSetUsingPredicate:(NSPredicate *)predicate
- (void)filterUsingPredicate:(NSPredicate*)predicate
谓词的本质: 条件表达式。
谓词到底可用哪些运算符?
- 各种比较运算符。包括 BETWEEN {下限, 上限}
- 逻辑运算符。 AND OR NOT
- 字符串运算符 BEGINSWITH、CONSTAINS、ENDSWITH、LIKE(可以支持?、*),MATCHES(支持正则表达式)
- 集合运算符:ANY、SOME、ALL、NONE、IN、对于数组,可以直接用array[index],array[FIRST]、array[LAST]、array[SIZE]
带参数的谓词
%@、%g、%d、%lu……:类似输出变量时所用的格式字符串。当谓词条件中存在某个变量时,就可通过这种形式的占位符来“插入”变量的值。
%K:可以在创建谓词时动态传入一个属性名。
$参数名 ,通过这个东西,可以让一个谓词模板变化出多个谓词对象。
- Object-C基础(13)——字典与谓词
- Object-C基础(7)——类与对象
- Object—C基础
- 黑马程序员——Object-C基础(十二)Foundation之字典
- Object-C基础—属性的介绍与使用
- Object-C基础—属性的介绍与使用
- Object-C基础—属性的介绍与使用
- Object-C 学习笔记(三十二)--- 谓词:NSPredicate
- Object-C基础(1)—— 变量名与类型
- Object-C基础(3)—— 流程控制与数组
- Object-C基础(6)——二维数组、结构体与块
- Object-C基础(8)——KVC、KVO与继承
- Object-C基础(9)——多态、类别、扩展与协议
- Object-C基础(10)——异常处理、反射、动态调用方法与内存回收
- Object-C基础(11)——字符串、日期相关类与拷贝
- Object-C基础(15)——NSBundle与对象归档
- Object-C 基础之0 — object c简介
- Objective-C基础——字典
- WPF的Datagrid显示,样式(隔行)换色
- Dagger2+Retrofit+RxJava
- spark调优经验(待续)
- alwayson 配置侦听器出错
- c base64加解密
- Object-C基础(13)——字典与谓词
- 如何将数据库从SQL Server迁移到MySQL
- MySql远程连接失败
- 环信 Ease3.0SDK 与EaseUI3.0 集成汇总 (卡壳的朋友们可以看看,已顺利集成成功)
- unix下控制字符
- HTML基本标记
- 搭建持续集成接口测试平台(Jenkins+Ant+Jmeter)
- android头像选择(拍照,相册,裁剪)
- DTD验证