OC中几种集合的遍历方法(数组遍历,字典遍历,集合遍历)


// 先分别初始化数组、字典和集合,然后分别用for循环、NSEnumerator枚举器和forin循环这三个方法来实现遍历

NSArray *array = @[@"yinhao", @"yinxiao", @"yinshuanghao", @"yindongdong"];

 

NSDictionary *dict = @{

                       @"name" : @"LeBron",

                       @"age" : @30,

                       @"sex" : @"",

                       @"hobby" : @"NBA"

                       };

 

NSSet *set = [NSSet setWithObjects:@"genie", @"weizhuang", @"tianming", @"shaoyu", @"高月", @"shilan", nil];

 

 

/**

 *  1.for循环遍历

 */

 

// for循环遍历数组

for (NSUInteger i = 0; i < array.count; i++) {

    // 根据数组下标访问相应的元素

    //NSString *str = [array objectAtIndex:i];

    NSString *str = array[i];   // 两种方法一样的

    NSLog(@"%@", str);

}

 

 

// for循环遍历字典

// 获取字典中所有的key

NSArray *keys = [dict allKeys];

// 遍历keys数组,访问相应的value

for (NSUInteger i = 0; i < keys.count; i++) {

    // 通过下标获取每个key

    NSString *key = keys[i];

    //id value = [dict objectForKey:key];

    id value = dict[key];    // 两种方法一样的

    NSLog(@"%@", value);

}

 

 

// for循环遍历集合

// 取出所有元素存放在数组中

NSArray *setArray = [set allObjects];

for (NSUInteger i = 0; i < setArray.count; i++) {

    //NSLog(@"%@", setArray[i]);

    NSLog(@"%@", [setArray objectAtIndex:i]);   // 两种方法一样的

    

}

 

 

 

/**

 *  2.NSEnumerator 枚举器遍历

 */

 

// NSEnumerator 遍历数组(正序)

// 创建正序的枚举器对象

NSEnumerator *arrayEnum = [array objectEnumerator];

id value = nil// 存储数组中的元素对象

// 判断value不为空打印数据

while ((value = [arrayEnum nextObject]) != nil) {

    NSLog(@"%@", value);

}

 

 

// NSEnumerator 遍历数组(倒序)

// 创建倒序的枚举器对象

NSEnumerator *arrayEnum1 = [array reverseObjectEnumerator];

id value1 = nil;

while (value1 = [arrayEnum1 nextObject]) {

    NSLog(@"%@", value1);

}

 

 

// NSEnumerator 遍历字典

// 遍历到的是字典中的object值,字典中存放的数据是无序的,没有反向枚举的概念

NSEnumerator *dictEnum = [dict objectEnumerator];

id value2 = nil;   // 存储字典中的value数据

while (value2 = [dictEnum nextObject]) {

    NSLog(@"%@", value2);

}

 

 

// NSEnumerator 遍历集合

// 遍历到的是集合中的object值,集合中存放的数据也是无序的,也没有反向枚举的概念

NSEnumerator *setEnum = [set objectEnumerator];

id value3 = nil;    // 存储集合中的value数据

while (value3 = [setEnum nextObject]) {

    NSLog(@"%@", value3);

}

 

 

// NSEnumerator遍历,不能删除其中的元素,使用for循环遍历数组可以修改其中的内容

// 以下两种删除或者修改数组中某个元素,只能通过for循环遍历数组来修改,不能使用NSEnumerator遍历来删除或修改

NSMutableArray *mArray = [NSMutableArray arrayWithArray:array];

NSEnumerator *arrayEnum2 = [mArray objectEnumerator];

id value4 = nil;

while (value4 = [arrayEnum2 nextObject]) {

    if ([value4 isEqualToString:@"yindongdong"]) {

        [mArray removeObject:value4];

        NSLog(@"%@", value4);

    }

    NSLog(@"%@", value4);

}

 

NSMutableArray *mArray1 = [NSMutableArray arrayWithArray:array];

for (int i = 0; i < mArray1.count; i++) {

    if ([mArray1[i] isEqualToString:@"yindongdong"]) {

        [mArray1 removeObject:mArray1[i]];

    }

}

NSLog(@"%@", mArray1);

 

 

 

/**

 *  3.for...in遍历

 */

// for...in遍历数组

for (NSString *str in array) {

    NSLog(@"%@", str);

}

 

 

// for...in遍历字典 (得到key,根据key访问value)

for (NSString *key in dict) {

    NSLog(@"%@", dict[key]);  // 两种方法一样

    //NSLog(@"%@", [dict objectForKey:key]);

}

 

 

// for...in遍历集合 (等到集合中的元素对象)

for (id obj in set) {

    NSLog(@"%@", obj);

}


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM