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

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

代码如下:

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. C#参数传递、引用类型、值类型等的理解

    本博客不属于技术贴,主要是记录一些自己对不懂得地方的理解和学习的记录,请带着批判的眼光阅读~ 值类型存储在栈上,引用类型存储在堆上.栈是由高到低存储的,遵循先进后出的原则,是内存提前分配好的区域,内存 ...

  2. js 事件小结

    1,事件对象   e || window.event //ie   2, 取鼠标点击坐标 带有滚动条的   var top = document.documentElement.scrollTop | ...

  3. 如何只克隆git仓库中的一个分支?

    git clone -b 例如: git clone -b 指定的分支名字

  4. vim 常用快捷键 二[转]

    键盘移动 (Move) 一切都从键盘的移动k -> 上 upj -> 下 downh -> 左 leftl -> 右 rightz -> 重画屏幕,当前光标变成屏幕的第一 ...

  5. 利用radio实现纯css选项卡切换

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAtIAAABCCAIAAAD18aaXAAAG70lEQVR4nO3dO5KrPBCGYRY0VV4OEX

  6. PHP判断访客是否移动端浏览器访问

    今天要给大家分享一段PHP代码,该代码的功能是用来判断访客是否移动端浏览器访问,该功能的实现思路是通过HTTP_X_WAP_PROFILE. HTTP_VIA.HTTP_USER_AGENT等信息来判 ...

  7. Python爬虫学习:二、爬虫的初步尝试

    我使用的编辑器是IDLE,版本为Python2.7.11,Windows平台. 本文是博主原创随笔,转载时请注明出处Maple2cat|Python爬虫学习:二.爬虫的初步尝试 1.尝试抓取指定网页 ...

  8. information_schema.triggers 学习

    mysql实例中的每一个trigger 对应到information_schema.triggers 中有一行 1.information_schema.triggers 表的常用列: 1.trigg ...

  9. 编译boost python模块遇到的错误:../../libraries/boost_1_44_0/boost/python/detail/wrap_python.hpp:75:24: fatal error: patchlevel.h: No such file or directory

    就是遇到类似标题上面的错误. 原因是没有安装对应python的python-dev依赖,不然编译到boost python模块的时候就会出错. 所以解决方案是sudo apt-get install ...

  10. 转:基础总结篇之一:Activity生命周期

    熟悉javaEE的朋友们都了解servlet技术,我们想要实现一个自己的servlet,需要继承相应的基类,重写它的方法,这些方法会在合适的时间被servlet容器调用.其实android中的Acti ...