啥也别说了直接上代码:
//找文件位置 有两种方法
NSString *path = @"/Users/lan/Desktop/OC语言/Wzh_OC_07_省市区练习/Wzh_OC_07_省市区练习/area.txt";
// NSString *path1 = [[NSBundle mainBundle]pathForResource:@"area" ofType:@"txt"];
//找文件位置 有两种方法
NSString *pathString = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
//字符串进分割
NSArray *array = [pathString componentsSeparatedByString:@"\n"];
//创建一个省的数组
NSMutableArray *proArr = [NSMutableArray array];
//快速便利
for (NSString *str in array) {
//判断非空格字符,找出省
if (![str hasPrefix:@" "]) {
//每找到一个省的名字,创建一个省字典
NSMutableDictionary *proDic = [NSMutableDictionary dictionary];
//将便利的省名放到字典中,并设置key为proName
[proDic setValue:str forKey:@"proName"];
//创建一个市的数组 作为存下属市用
NSMutableArray *cityArr = [NSMutableArray array];
//将市的数组放到省得字典里面 这里市是没有值的 设置key为市数组
[proDic setObject:cityArr forKey:@"市数组"];
//将省字典组放到省的数组中
[proArr addObject:proDic];
//判断是否已两个空格和不是四个空格的字符串
}else if ([str hasPrefix:@" "] && ![str hasPrefix:@" "]) {
//取出省数组里的省的最后一个元素,代表市所隶属的省字典 判断是从上往下的
NSMutableDictionary *proDic = [proArr lastObject];
//从省得字典里预留的数组取出
NSMutableArray *cityArr = [proDic objectForKey:@"市数组"];
//每找到一个市,创建一个市字典
NSMutableDictionary *cityDic = [NSMutableDictionary dictionary];
//将便利的东西放到市字典里
[cityDic setObject:str forKey:@"cityName"];
//为下属区域创建个数组作为预留
NSMutableArray *areArr = [NSMutableArray array];
//将区的数组放到市的字典里
[cityDic setObject:areArr forKey:@"区数组"];
//将市的字典放到市的数组里
[cityArr addObject:cityDic];
}else{
//从省的数组里面取出最后一个元素的省得字典
NSMutableDictionary *proDic = [proArr lastObject];
//从省得字典里面取出市的数组
NSMutableArray *cityArr = [proDic objectForKey:@"市数组"];
//从市的数组里面取出最后一个元素市的字典
NSMutableDictionary *cityDic = [cityArr lastObject];
//从市的字典取出区的数组
NSMutableArray *areArr = [cityDic objectForKey:@"区数组"];
//将剩下便利的区名放到区的数组里
[areArr addObject:str];
}
}
//便利出省的名字
for (NSMutableDictionary *proDic in proArr) {
NSLog(@"%@",[proDic objectForKey:@"proName"]);
//找出那个省的市的数组
NSMutableArray *cityArr = [proDic objectForKey:@"市数组"];
for (NSMutableDictionary *cityDic in cityArr) {
NSLog(@"%@",[cityDic objectForKey:@"cityName"]);
//找出那个市字典里的区数组
NSMutableArray *areArr = [cityDic objectForKey:@"区数组"];
for (NSString *are in areArr) {
NSLog(@"%@",are);
}
}
}
思路理解:
首先先理解省市区要怎么封装 首先txt的格式是没有空格的是省名,两个空格的是市名,四个空格的是区县名
大体构造是 省数组( 省字典( 省名字 ,市数组 (市字典( 市名字 , 区数组 ) ) ) , 省字典( 省名字 ,市数组 (市字典( 市名字 , 区数组 ) ) ) , 省字典( 省名字 ,市数组 (市字典( 市名字 , 区数组 ) ) ) …….. )
首先创建一个省数组 当 每将判断完的省名 就创建一个字典,里面存着省名, 并且构架好一个市的数组存进字典中
然后 再进行判断判断为两个空格的(市名) , 如果是的话 创建一个一个字典,将判断的市名放进字典中,并且构造好区的数组存进字典中, 再把刚刚存在省里面的最后一个省字典拿出来(因为判断是从上往下的 到别的省的市,它最后一个元素也就变成对应的省了 ,下面区同理),然后拿出省字典里面预留的市的数组,将你创建的字典放进去;
最后 判断是不是有四个空格的(区县),然后从省的数组里面找出最后一个元素(省字典) , 然后从省字典里面找出市数组,再从市数组里面找出最后一个元素(市字典),再从市字典里面找出区数组,并把判断的数据给它;
输出同理 便利的时候先将省数组里面的省字典找出来 ,并且将省字典里的名字输出出来 ,然后再从省字典里面找出市的数组,然后将市数组里面的市字典里面的市名输出出来 ,最后将市字典里的区县输出出来
讲得有点乱,请各位亲们理解,有什么我讲得不对或者混乱的请留言和我说下,不甚感激!!!