2.集合对象 set是一组单值对象集合,它可以是可变的,也可以是不变的,操作包括:搜索、添加、删除集合中得成员(仅用于可变集合), 集合对象包括3个类:NSSet、NSMutableSet和NSIndexSet
1)NSSet 有如下代码:(注释写明了方法的使用步骤,不在说明)
[objc] view plaincopy
- int main(int argc, const charchar * argv[]) {
- @autoreleasepool {
- NSMutableSet *set = [NSMutableSet setWithObjects: @10, @123, @321, nil nil];
- NSMutableSet *set1 = [NSMutableSet setWithObjects:@321, @123, @3123, nil nil];
- NSMutableSet *set2 = [NSMutableSet setWithObjects:@1234, @1234, @3212,nil];
-
- [set print];
- [set1 print];
- [set2 print];
-
- //相等测试
- if ([set isEqual: set1] != YES) {
- printf("Not Equal");
- }
-
- // 成员测试
- if ([set1 containsObject: @321]== YES) {
- NSLog(@" set1 contains 10");
-
- //在可变集合 set1 中添加和移除对象
- }
- [set1 addObject: @4];
- [set2 addObject: @"Hello"];
- [set1 removeObject: @123];
-
- [set print];
- [set1 print];
- [set2 print];
2)NSIndexSet 类的使用 1.这个类用于存储有序的索引到某种数据结构,不如数组。例如使用这个类生成一份数组对象的索引号清单,代码如下:(以AddressBook类的lookup:方法进行修改。 使用方法: indexesOfObjectsPassingTest: ^(id obj,NSUInteger idx, BOOL *stop)bolck 可以生成一个 NSIndexSet类型的对象(注:array的遍历方法为indexOfObjectsPassingTest: 生成的时一个NSUInteger类型的变量,不一样)
代码如下:
[objc] view plaincopy
- //使用NSIndexSet类的方法,查找并返回所有与name的AddressCard存储在数组中的 索引号集合
- -(NSIndexSet *)lookupAll2: (NSString *)name
- {
- //存储与Name相同的所用对象
- NSMutableArray *maches = [NSMutableArray array];
- NSIndexSet *result = [NSIndexSet indexSet];
-
- result = [bookArray index: ^(id obj, NSUInteger idx, BOOLBOOL *stop){
- if ([[obj name] caseInsensitiveCompare: name] == NSOrderedSame){
- //如果只寻找第一个与Name相同的对象时,可以使用以下语句。
- //*stop = YES;
- [maches addObject: obj];
- return YES;
- }
- else
- return NO;
- }];
-
- return result;
-
- }
|