iOS中NSArray/NSSet的一些巧妙用法
最近用到很多操作集合类型的方法,这里总结分享一下,也欢迎大家一起补充。
- 假设我们已经有一个
NSArray<Model *>
类型的数组,但是我们想把这个数组中的Model
的某个属性取出组成一个新的数组,一般情况下可能是直接去遍历,但是NSArray/NSSet
有一个更便捷的方法valueForKey:
,可以快速取出对应属性组成的数组。但是有个问题就是这个方法的效率比for
循环低,数据量不大的时候使用还是没有问题的。如下面两张图:
-
要取两个数组的交集的时候,可以先将
NSArray
转换成NSMutableSet
,再通过取二者交集即可。但是需要注意一点的是数组中的元素最好复写一下isEqual:
和hash
方法,保证取交集后的结果是正确的。 -
要将数组内元素排序或者过滤等操作,可以结合
NSSortDescriptor
和NSPredicate
使用,可以避免掉大量冗余的for
循环之类的代码。关于NSPredicate
的用法可以参考 NSHipster 和Realm
的 Cheetsheet -
关于图中
valueForKey:
的参数为什么不直接用@"name"
而是用NSStringFromSelector(@selector(name))
,是因为后者会有代码提示可以避免硬编码带来的错误,同时后续该key
换名字了之后,会有对应的警告。这个也是从AFNetworking
中学到的。如图所示: