忙里偷闲写篇小文。
开发中经常会用到遍历方法、这里主要讲一下关于iOS系统提供的enumerate的遍历方法的使用:
-
数组
// 遍历数组
NSArray *array = @[@"arr-0",@"arr-1",@"arr-2",@"arr-3",@"arr-4"];
// 正常遍历 enumerateObjectsUsingBlock
[array enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
NSLog(@"obj:%@",obj);
}];
// 倒序遍历 enumerateObjectsWithOptions - NSEnumerationReverse
[array enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
NSLog(@"2-obj:%@",obj);
}];
// 指定某一个 enumerateObjectsAtIndexes
NSIndexSet *set = [NSIndexSet indexSetWithIndex:0];
[array enumerateObjectsAtIndexes:set options:NSEnumerationReverse usingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
NSLog(@"obj:%@---%ld",obj,idx);
}];
以上是enumerate关于数组遍历的三种方式。
这里涉及到两种顺序:
NSEnumerationConcurrent 当前的排序状态
NSEnumerationReverse 倒序排列
所以、通过这个我们也可以在for-in方法中去进行倒序遍历、具体如下:
NSArray *array = @[@"arr-0",@"arr-1",@"arr-2",@"arr-3",@"arr-4"];
for(id obj in [array reverseObjectEnumerator]) {
NSLog(@"倒序forin:%@",obj);
}
-
字典
具体的代码如下:
// 遍历字典
NSDictionary *dict = @{@"key0":@"value0",
@"key1":@"value1",
@"key2":@"value2",
@"key3":@"value3",
@"key4":@"value4"};
// 无序
[dict enumerateKeysAndObjectsUsingBlock:^(id _Nonnull key, id _Nonnull obj, BOOL * _Nonnull stop) {
// obj == value
NSLog(@"key:%@---value:%@",key,obj);
}];
// 并发-无序
[dict enumerateKeysAndObjectsWithOptions:NSEnumerationReverse usingBlock:^(id _Nonnull key, id _Nonnull obj, BOOL * _Nonnull stop) {
NSLog(@"key:%@---value:%@",key,obj);
}];
其实对于字典的这两个方法,打印的结果并没有什么区别。
3.字符串
NSString *string = @"how are you?\nI'm fine";
//方法一
[string enumerateLinesUsingBlock:^(NSString * _Nonnull line, BOOL * _Nonnull stop) {
NSLog(@"line:%@",line);
}];
// 方法二
[string enumerateSubstringsInRange:NSMakeRange(0, string.length) options:NSStringEnumerationByWords usingBlock:^(NSString * _Nullable substring, NSRange substringRange, NSRange enclosingRange, BOOL * _Nonnull stop) {
NSLog(@"sub:%@",substring);
}];
根据上图的打印结果可以得知:
对于字符串的这两个方法而言,主要可用于文本类型的大量字符串遍历处理。并且方法一中的line是通过换行符号来区分的,这样就可以很快的对一遍文章进行分行获取。
对于方法二,其他的枚举值还有以下内容:
以上就是对OC中enumerate系列方法的使用的一点小小的总结。希望可以对大家有所帮助。
我是姣爷、我在、加油!