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中学到的。如图所示:
