对于省市区的问题,关键在于搞清楚数组嵌套字典,字典里面装数组的多重嵌套关系,沉下心来,捋清楚思路,

实在看不懂就多打几遍,这道题理解了,熟练了对之后学习很有好处。

代码如下:

NSString *path = @"/Users/lan/Desktop/省市区/省市区/area.txt";    //导入省市区文本的路径

NSString *pathStr = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];    //通过UTF8转码,将省市区装入到字符串中

 NSArray *array = [pathStr componentsSeparatedByString:@"\n"];      //根据回车符号“\n”,将字符串切割成数组

NSMutableArray *arrayProvince = [NSMutableArray arrayWithCapacity:0];  //创建初始化一个可变数组

 for (NSString *str in array) {  //遍历数组

if (![str hasPrefix:@" "]) {     //判断非空格字符,找出省(由于省的名字前没有空格)

//每找到一个省的名字,创建一个字典

NSMutableDictionary *proDic = [NSMutableDictionary dictionaryWithCapacity:0];

//将省的名字放入字典当中,并设置key为ProName

[proDic setObject:str forKey:@"ProName"];

//创建市的数组,存放市区的字典

NSMutableArray *cityArray = [NSMutableArray arrayWithCapacity:0];

//将数组存入省的字典中

[proDic setObject:cityArray forKey:@"cityArray"];

//将省字典放入省的字典中

[arrayProvince addObject:proDic];

}

//找到市的名字

else if ([str hasPrefix:@"  "] && ![str hasPrefix:@"    "]){

//找到隶属的省的字典

NSDictionary *proDic = [arrayProvince lastObject];

//将省字典中预留的市的数组找出来

NSMutableArray *cityarr = [proDic objectForKey:@"cityArray"];

//创建市的字典

NSMutableDictionary *cityDic = [NSMutableDictionary dictionaryWithCapacity:0];

//把市的名字写入到市的字典中

[cityDic setObject:str forKey:@"cityName"];

//创建区的数组,用来存放找到的区的名字

NSMutableArray *zoneArray = [NSMutableArray arrayWithCapacity:0];

//把区的数组,放入到市的字典中

[cityDic setObject:zoneArray forKey:@"zoneArray"];

//把市的字典放入到市的数组中

[cityarr addObject:cityDic];

}

else{

//找到隶属的省的字典

NSDictionary *proDic = [arrayProvince lastObject];

//将省字典中预留的市的数组找出来

NSMutableArray *cityarr = [proDic objectForKey:@"cityArray"];

//将市数组中的市的字典找到

NSDictionary *citDic = [cityarr lastObject];

//将市字典中的区的数组找到

NSMutableArray *zoneArray = [citDic objectForKey:@"zoneArray"];

[zoneArray addObject:str];

}

for (NSMutableDictionary *dic1 in arrayProvince) {    //遍历打印

NSLog(@"%@",[dic1 objectForKey:@"ProName"]);

for (NSMutableDictionary *dic2 in [dic1 objectForKey:@"cityArray"]) {

NSLog(@"%@",[dic2 objectForKey:@"cityName"]);

for (NSString *str in [dic2 objectForKey:@"zoneArray"]) {

NSLog(@"%@",str);

}

}

}

关于OC-省市区习题的更多相关文章

  1. OC:习题来自平时搜索

    == 第一部分 ==  类变量的@protected ,@private,@public,@package,声明各有什么含义?写一个标准宏MIN,这个宏输入两个参数并返回较小的一个?面向对象的三大特征 ...

  2. 二.OC基础--1,对象的存储细节,2,#pragma mark指令,3,函数和对象方法的区别,4,对象和方法之间的关系 ,5.课堂习题

    1,对象的存储细节, 1. 当创建一个对象的时候:Person *p1 = [Person new],做了三件事情: 1,申请堆内存空间: 2,给实例变量初始化: 3,返回所申请空间的首地址; 2. ...

  3. OC Foundation框架—字符串操作方法及习题

    #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { ...

  4. OC中的面向对象语法3

    一. set方法和get方法 1. set方法和get方法的使用场合 @public的成员可以被随意赋值,应该使用set方法和get方法来管理成员的访问(类似机场的安检.水龙头过滤,过滤掉不合理的东西 ...

  5. OC中面向对象2

    一. 定义OC的类和创建OC的对象 接下来就在OC中模拟现实生活中的情况,创建一辆车出来.首先要有一个车子类,然后再利用车子类创建车子对象 要描述OC中的类稍微麻烦一点,分2大步骤:类的声明.类的实现 ...

  6. OC语言的面向对象—类和对象、方法

    1. 面向对象和面向过程思想 OC是面向对象的,C是面向过程的.面向对象和面向过程只是解决问题的两种不同思想 1. 面向对象和面向过程的区别 1) 以用电脑听歌为例子 a) 面向过程 ➢ 打开电脑 ➢ ...

  7. iOS头条新闻App、自动布局、省市区联动、登录按钮动画、Alert弹框效果等源码

    iOS精选源码 LEEAlert -- 优雅的Alert ActionSheet 登录按钮 省市区三级联动 JHViewCorner - 一行代码搞定圆角 JHFrameLayout - 一行代码实现 ...

  8. iOS代码规范(OC和Swift)

    下面说下iOS的代码规范问题,如果大家觉得还不错,可以直接用到项目中,有不同意见 可以在下面讨论下. 相信很多人工作中最烦的就是代码不规范,命名不规范,曾经见过一个VC里有3个按钮被命名为button ...

  9. 用C语言封装OC对象(耐心阅读,非常重要)

    用C语言封装OC对象(耐心阅读,非常重要) 本文的主要内容来自这里 前言 做iOS开发的朋友,对OC肯定非常了解,那么大家有没有想过OC中NSInteger,NSObject,NSString这些对象 ...

  10. 嵌入式&iOS:回调函数(C)与block(OC)传 参/函数 对比

    C的回调函数: callBack.h 1).声明一个doSomeThingCount函数,参数为一个(无返回值,1个int参数的)函数. void DSTCount(void(*CallBack)(i ...

随机推荐

  1. js-String

    1.一个字符串可以使用单引号或双引号 2.查找 字符串使用 indexOf() 来定位字符串中某一个指定的字符首次出现的位置 如果没找到对应的字符函数返回-1 lastIndexOf() 方法在字符串 ...

  2. java静态成员的初始化过程

    public class Price{ final static Price INSTANCE = new Price(2.8); static double initPrice = 20; doub ...

  3. Struts2中的ActionContext

    ActionContext(Action上下文) ActionContext介绍 通过上面用户注册例子的学习,我们知道Xwork与Web无关性,我们的Action不用去依赖于任何Web容器,不用和那些 ...

  4. UVA11806Cheerleaders(容斥)

    转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud 题目意思:在m行n列的矩形网格中放k个相同的石子,问有多少中方法?每个格子最多放一 ...

  5. #pragma section

    看了别人使用了#pragma section来共享变量,今天试了下 如下添加代码 #define GLOBAL_SHARED __declspec(allocate(".Shared&quo ...

  6. HDU ACM 题目分类

    模拟题, 枚举1002 1004 1013 1015 1017 1020 1022 1029 1031 1033 1034 1035 1036 1037 1039 1042 1047 1048 104 ...

  7. HDU 1172 猜数字(DFS)

    猜数字 Time Limit:10000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status ...

  8. showModalDialog(转)

    基本介绍:          showModalDialog()         (IE 4+ 支持)          showModelessDialog()      (IE 5+ 支持)    ...

  9. instancetype和id的区别

    一.什么是instancetype instancetype是clang 3.5开始,clang提供的一个关键字,表示某个方法返回的未知类型的Objective-C对象.我们都知道未知类型的的对象可以 ...

  10. Extjs Tooltip属性的使用

    要想让 tooltip生效必须:Ext.QuickTips.init();