比较好的入门数组字典的题目.
题目要求将一个文件里面的省市区装入一个数组里.
首先我们要新创建一个工程并且将area.txt文件装入工程之中.
直接将文件拖动到工程名下
拖后就是这个页面,打钩的就是防止源文件没有了所以复制一份到工程文件里
拖完之后开始编程了.首先我们要将文件读取出来放进字符串中
NSString *path =@"/Users/lan/Desktop/Lesson_06_oc_for/Lesson_06_oc_for/area.txt";
NSString *pathString = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
pathString就是所有的字符串
NSArray * all = [pathString componentsSeparatedByString:@"\n"];
将字符串以换行符为切割点分开,放进all的数组里.
省数组包含省字典.省字典有两对键值.一对值为省名,键值为@”省名”,另一对值为 市 的数组,键值为@”城市”.市的数组包含市字典,一个市一个市字典.市字典也象省字典,有两对键值.一对为市名,键值为@”市名”,另一对值为 区 的数组, 键值为 @”区” .区没有下属区域了,所以区的数组只包含nsstring对象,里面都是区的名字.
NSMutableArray * shengzu=[[NSMutableArray alloc]init];
for (NSString * address in all) {
if (![address hasPrefix:@" "]) {
//如果是省,创建一个省字典,最后把这个省字典加入省数组
NSMutableDictionary * shengdic = [[NSMutableDictionary alloc]init];
[shengdic setObject:address forKey:@"shengming"];
NSMutableArray * shizu = [[NSMutableArray alloc]init];
[shengdic setObject:shizu forKey:@"shi"];
//以上为放进两对键值到省字典,一个为省名,另一个是市数组
[shengzu addObject:shengdic];
}else if ([address hasPrefix:@" "]&&![address hasPrefix:@" "]){
//如果到了市名,创建市字典.
NSMutableDictionary * shidic = [[NSMutableDictionary alloc]init];
[shidic setObject:address forKey:@"shiming"];
NSMutableArray * quzu = [[NSMutableArray alloc]init];
[shidic setObject:quzu forKey:@"qu"];
//以上把市名,区数组两对键值放进市字典.
//为了获取对应的位置. 首先获取对应省字典,此时省数组最后的元素就是对应的省字典.找到省字典后,省字典的key为市的object就是对应的市数组
NSMutableDictionary *shengdic = [shengzu lastObject];
NSMutableArray * shizu = [shengdic objectForKey:@"shi"];
//找到对应的市数组就是为了把市字典加进市数组
[shizu addObject:shidic ];
}
else {
//因为区没有下属的区域了,所以找到对应的位置之后直接把nsstring加进区数组
NSMutableDictionary *shengdic = [shengzu lastObject];
NSMutableArray * shizu = [shengdic objectForKey:@"shi"];
NSMutableDictionary * shidic = [shizu lastObject];
NSMutableArray * quzu =[shidic objectForKey:@"qu"];
[quzu addObject:address];
}
}
//遍历
for (NSDictionary * shengdic in shengzu) {
NSLog(@"%@",[shengdic objectForKey:@"shengming"]);
for ( NSDictionary * shidic in [shengdic objectForKey:@"shi"]) {
NSLog(@"%@",[shidic objectForKey:@"shiming"]);
for (NSString * qu in [shidic objectForKey:@"qu"]) {
NSLog(@"%@",qu);
}
}
}
遍历也比较有意思哦.因为我们要从数组跳字典,字典跳数组.真正理解了整个数组结构的人才明白怎样遍历.