-
遍历集合建议使用块遍历
- OC
NSArray *array = @[@"1", @"2"]; [array enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { }]; NSDictionary *dict = @{@"aaa": @111, @"bbb": @222}; [dict enumerateKeysAndObjectsUsingBlock:^(id _Nonnull key, id _Nonnull obj, BOOL * _Nonnull stop) { }]; NSSet *set = [[NSSet alloc] initWithObjects:@"111", @"222", nil]; [set enumerateObjectsUsingBlock:^(id _Nonnull obj, BOOL * _Nonnull stop) { }]; // 反向遍历(以数组为例) NSArray *array = @[@"1", @"2"]; [array enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { }]; // 并发遍历(以数组为例) NSArray *array = @[@"1", @"2"]; [array enumerateObjectsWithOptions:NSEnumerationConcurrent usingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { }]; // 并发和反向遍历(以数组为例) NSArray *array = @[@"1", @"2"]; [array enumerateObjectsWithOptions:(NSEnumerationConcurrent | NSEnumerationReverse) usingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { }];
- swift
let array = ["1", "2"] for (index, obj) in array.enumerated() { print(index, obj) } let dict:Dictionary<String, String> = ["aa": "11", "bb": "22"] for (index, obj) in dict.enumerated() { print(index, obj.key, obj.value) } let set: Set = ["111", "222"] for (index, obj) in set.enumerated() { print(index, obj) } // 反向遍历(以数组为例) let array = ["1", "2"] for (index, obj) in array.enumerated().reversed() { print(index, obj) }
swift 做遍历的时候也可以把类型定义为NSArray、NSDictionary、NSSet,这样就可以直接使用OC的块遍历的方法
注意:使用块遍历可以直接修改集合中的值,不会导致崩溃,但如果要删除的话,需要用反向遍历,正向遍历会崩溃;或者用深拷贝一个副本,删除的时候删除副本中的数据
网友评论