什么是遍历 ?
最近总有刚接触编程的朋友问我什么是遍历? 那是用来干什么用的? 今天就来解释一下遍历以及在OC中的具体用法
在众多计算机程序语言中,数组是必不可少的数据类型。而所谓遍历就是沿着某条搜索路线依次对每个节点做依次且仅做一次的访问。具体到遍历数组,就是按照数组下标依次访问或操作数组的每个元素。如下图所示。
OC中的字典,其实与数组很像。数组(如图1)是下标与数组元素的对应,而字典,则是key与value的对应。学过PHP的人应该都很容易理解,因为PHP中的数组就是key与value的对应。
一、for循环遍历
1)遍历数组
NSArray *array = [NSArray arrayWithObjects:@"大连", @"北京", @"上海", @"成都", @"深圳", @"天津", nil];
// array.count 可以返回数组一共有几项
for (NSInteger i = 0; i < array.count; i++) {
//将对应下标的对象赋值给str,然后打印
NSString *str = array[i];
NSLog(@"%@", str);
}
- 遍历字典
由于字典是key与value的对应, 因此没有数组那样的下标供我们遍历。但是NSDictionary提供了两个属性(allKeys 与 allValues)可以将全部的key或value取出放到数组中, 我们可以遍历取出的数组来达到遍历字典的目的。
NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:@"张三", @"姓名", @"16", @"年龄", @"大连", @"城市", nil];
// 将所有的key取出放入数组arr中
NSArray *arr = [dic allKeys];
// 遍历arr 取出对应的key以及key对应的value
for (NSInteger i = 0; i < arr.count; i++) {
NSLog(@"%@ : %@", arr[i], [dic objectForKey:arr[i]]); // dic[arr[i]]
}
二、for-in遍历
-
遍历数组
NSArray *array = @[@"大连",@"上海",@"北京",@"杭州"];
// 数组array中存放的数据类型是NSString
for (NSString *str in array) {
NSLog(@"%@", str);
} -
遍历字典
NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:@"张三", @"姓名", @"16", @"年龄", @"大连", @"城市", nil];
for (NSString *key in dic) {
NSLog(@"%@ : %@", key, [dic objectForKey:key]);
}
三、枚举器
-
遍历数组
NSArray *array = @[@"张三", @"赵四", @"小宋", @"刘能"];
// 获取数组枚举器:(正序枚举)
NSEnumerator *enumerator = [array objectEnumerator];id value = nil;
while (value = [enumerator nextObject]) {
NSLog(@"%@", value);
}// 反向枚举:(逆序)
enumerator = [array reverseObjectEnumerator];value = nil;
while (value = [enumerator nextObject]) {
NSLog(@"%@", value);
} -
遍历字典:
NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:@"张嘴", @"姓名", @"23", @"年龄", @"女", @"性别", nil];
NSEnumerator *enumerator2 = [dic objectEnumerator];
id value2 = nil;
while (value2 = [enumerator2 nextObject]) {
NSLog(@"%@", value2);
}