Objective-C中NSArray的基本用法示例
2015-12-18 21:10 jiangys 阅读(9970) 评论(0) 编辑 收藏 举报NSArray的一些用法
NSArray只允许装OC对象,并且不能装空值,空代表数组元素的结束
#pragma mark - NSArray的基本用法 // 创建一个空数组 NSArray *array = [NSArray array]; // 创建有一个元素的数组 array = [NSArray arrayWithObject:@"123"]; // 创建有多个元素的数组 array = [NSArray arrayWIthObjects:@"a",@"b",nil ];//不能装nil空指针,空值代表数组元素结束 // 将一个数组赋值给一个数组 + (instancetype)arrayWithArray:(NSArray *)array; // 获取元素的个数 int count = [array count]; //和 count = array.count; 相同,都是调用get方法 // 是否包含一个元素 - (bool)containsObject:(id)anObject; // 返回最后一个元素 - (id) lastObject; // 获取index位置的元素 - (id)objectAtIndex:(NSUInteger) index; // 获取元素的位置 - (NSUInteger) indexOfObject:(id)anObject; // 在range范围内查找元素的位置 - (NSUInteger) indexofObject:(id)anObject inRange:(NSRange)range; // 比较两个集合内容是否相同 - (Bool) isEqualToArray:(NSArray *)otherArray; // 返回两个集合中第一个相同的对象元素 - (id) firstObjectCommonWithArray:(NSArray *)otherArray; #pragma mark - NSArray的高级用法 //让集合里面的所有元素都执行aSelector这个方法 - (void)makeObjectsPerformSelector:(SEL)aSelector; //让集合里面的所有元素都执行aSelector这个方法,给这个方法添加参数,但是只支持一个参数 - (void)makeObjectsPerformSelector:(SEL)aSelector withObject:(id)argument //添加一个元素,返回一个新的NSArray(方法调用者本身没有发生变化) - (NSArray *)arrayByAddingObject:(id)anObject //添加otherArray的所有元素,返回一个新的NSArray(方法着本身没有改变) - (NSArray *) arrayByAddingObjectsFromArray:(NSArray *) otherArray; //截取range范围的数组 - (NSArray *) subarrayWithRange:(NSRenge)range; //用separator做拼接符,拼接成一个字符串 - (NSString *) componentsJoinedByString:(NSString *)separator //将NSArray持久化到文件中去 - (Bool) writeToFile:(NSString *)path atomically:(Bool)useAuxiliaryFile #pragma mark - NSArray的遍历 // 方法一:普通遍历(利用for循环) void arrayFor1(){ NSArray *array = [NSArray arrayWithObjects:@"1",@"2",@"3",nil]; int count = array.count; for(int i=0; i<count; i++){ id obj = [array objectAtIndex:i]; NSLog(@"%i-%@",i, obj); } } // 方法二:快速遍历 void arrayFor2(){ NSArray *array = [NSArray arrayWithObjects:@"1",@"2",@"3",nil]; int count = array.count; int i=0; for(id obj in array){ NSLog(@"%i-%@",i, obj); i++; } } // 方法三:利用block遍历 void arrayFor3(){ NSArray *array = [NSArray arrayWithObjects:@"1",@"2",@"3",nil]; [array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { NSLog(@"%zi->%@",idx, obj); // *stop = YES; //改变外边的Bool,终止遍历 }]; } // 方法四:利用迭代器 // 先介绍一下-->NSEnumerator迭代器:集合的迭代器,可以用于遍历集合元素,NSArray 有相应的方法来获取迭代器 //获取一个正序遍历的迭代器 - (NSEnumerator *) objectEnumerator; //获取一个反序遍历的迭代器 - (NSEnumerator *) reverseObjectEnumerator; @常用方法: //获取下一个元素 - (id) nextObject; //获取所有的元素 - (NSArray *) allObjects void arrayFor4(){ NSArray *array = [NSArray arrayWithObjects:@"1",@"2",@"3",nil]; NSEnumerator *enumerator = [array objectEnumerator];// 返回数组的迭代器 //如果放到遍历之后,则取到空,原因是,遍历完了,就没值了 NSArray *array2 = [enumerator allObjects]; NSLog(@"array2=%@", array2); //获取下一个需要遍历的元素 id obj = nil; while (obj = [enumerator nextObject]) { NSLog(@"obj=%@", obj); } }
使用block 块遍历整个数组
这个block 需要三个参数:
- id obj 表示数组中的元素
- NSUInteger idx 标示元素的下标
- boolbool *stop 是一个bool类型的参数
-
NSEnumerationReverse 标示 是从前向后遍历,还是从后往前遍历
例一:
NSArray *array = [NSArray arrayWithObjects:@"wendy",@"andy",@"tom",@"test", nil]; [array enumerateObjectsUsingBlock:^(id str,NSUInteger index, BOOL* te){ NSLog(@"%@,%d",str,index); }];
例二:
NSArray *array = [NSArray arrayWithObjects:@"wendy",@"andy",@"tom",@"test", nil]; [array enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:^(id str,NSUInteger index, BOOL* te){ NSLog(@"%@,%d",str,index); }];
参考网站: