Collection类的实例用于保存指向其他对象的指针。
1、NSSet/NSMutableSet
NSSet对象包含的内容是无序的,而且每个特定的对象只能出现一次。
NSSet对象最大的用处是检查某个对象是否存在。
NSSet对象不能对指针进行修改。
NSMutableSet是它的子类,它能够对其中的指针进行添加或删除等操作。
NSSet对象中的对象是无序的,所以不能通过索引来访问,只能向NSSet对象查询某个对象是否存在。
- (BOOL) containsObject:(id)x;
2、NSDictionary/NSMutableDictionary
NSDictionary对象是一组键值对的集合。键通常是字符串,值可以是任意类型的对象。
字典也没为NSMutableDictionary及NSDictionary两种。
字典的创建方式:(注意@符号)
获取字典中的元素
NSString *marsMoonCount = numberOfMoons[@"Mars"];
//创建NSMutableDictionary对象
NSMutableDictionary *executives = [[NSMutableDictionary alloc] init];
//添加元素
[executives setObject:mikey forKey:@"CEO"];
3、不可修改对象
使用不能修改的collection可以节约内存提高性能,因为它永远无须拷贝。
NSArray的copy方法其实不会做任何额外的工作,仅仅返回指向自身的指针。
NSMutableArray的copy方法则会制作一份自己的拷贝,并返回指向新数组对象的指针。
4、数组排序
不可修改的数组不能排序。
修改main.m,先根据valueOfAssets属性排序,如果相同,则根据employeeID排序。
//定义两种排序规则
NSSortDescriptor *voa = [NSSortDescriptor sortDescriptorWithKey:@"valueOfAssets"
ascending:YES];
NSSortDescriptor *eid = [NSSortDescriptor sortDescriptorWithKey:@"employeeID"
ascending:YES];
//进行排序
[employees sortUsingDescriptors:@[voa, eid]];
5、过滤
//创建过滤规则
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"holder.valueOfAssets > 70"];
//过滤
NSArray *toBeRecalaimed = [allAssets filteredArrayUsingPredicate:predicate];
//输出
NSLog(@"toBeReclaimed:%@",toBeRecalaimed);
//置空
toBeRecalaimed = nil;