iOS - OC - NSDictionary NSArray - nest

一道经典的 省市区题目 字典与数组的循环嵌套 对于初学OC的朋友理解字典与数组有很大的帮助

结构图 : 

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {

//第一版本

//    NSString * path = @"/Users/bruce_lin/Desktop/area.txt";

//    NSString * content = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];

//

//    NSArray * fileArr = [content componentsSeparatedByString:@"\n"];

//

//    NSMutableArray *mainArr = [NSMutableArray array];

//

//    for (NSString *one in fileArr)

//    {

//        if (![one hasPrefix:@" "])

//        {

//            NSMutableDictionary * province = [NSMutableDictionary dictionary];

//            NSMutableArray * cityArr = [NSMutableArray array];

//

//            [province setObject:cityArr forKey:one]; //为省字典添加键值 键为省名 值为市数组

//            [mainArr addObject:province];//将省字典加到省数组

//        }

//        else if ([one hasPrefix:@"  "]&& ![one hasPrefix:@"    "])

//        {

//            NSMutableDictionary * city = [NSMutableDictionary dictionary];

//            NSMutableArray * nextLevelCity = [NSMutableArray array];

//

//            [city setObject:nextLevelCity forKey:one]; //为市字典添加键值 键为市名 值为下级城市数组

//            NSString * a = [[[mainArr lastObject]allKeys]objectAtIndex:0];// 取省数组最近一次添加的省字典的键数组 取第一个元素(市名字符串)

//            [[[mainArr lastObject]objectForKey:a]addObject:city];//将对应得值(市数组取出) 将市字典添加进去

//        }

//        else if ([one hasPrefix:@"    "])

//        {

//            //取市数组最近一次添加的市字典的值(市数组) 将下级城市名字符串添加进数组中

//            NSMutableArray *temp = [[mainArr lastObject]objectForKey:[[[mainArr lastObject]allKeys]objectAtIndex:0]];

//            [[[temp lastObject]objectForKey:[[[temp lastObject]allKeys]objectAtIndex:0]]addObject:one];

//

//        }

//    }

//第二版本  //因为字典是无序的 打印的时候城市名有可能在下级城市之后打印 将两者代码交换下顺序即可

NSString *content = [NSString stringWithContentsOfFile:@"/Users/bruce_lin/Desktop/area.txt" encoding:NSUTF8StringEncoding error:nil]; // 将文件内容经过转码后保存在字符串中

NSArray * mainArr = [content componentsSeparatedByString:@"\n"]; //通过"\n"分割字符串 存在数组中

NSMutableArray *procvinArr = [NSMutableArray array]; //建立省数组 用来保存省字典

for (NSString *str in mainArr) // 遍历经过处理的文件

{

if (![str hasPrefix:@" "]) // 如果前缀没有空格 为省名

{

NSMutableDictionary * proDic = [NSMutableDictionary dictionary];

NSMutableArray * cityArr = [NSMutableArray array];

[proDic setObject:str forKey:@"pro"]; //省字典的第一个键值对为 pro--省名

[proDic setObject:cityArr forKey:@"city"]; // 下一个键值对 为 city--city数组

[procvinArr addObject:proDic]; // 将省字典 添加到省数组中

}

else if ([str hasPrefix:@"  "] && ![str hasPrefix:@"    "]) //如果前缀只有2个空格 没有4个空格 则为市名

{

NSMutableDictionary *cityDic = [NSMutableDictionary dictionary];

NSMutableArray * nextCity = [NSMutableArray array];

//同上 为市字典建立两个键值对 顺序交换 打印顺序不一样

[cityDic setObject:nextCity forKey:@"nextCityName"];

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

//根据文件结构 及遍历顺序  从省数组中 取出 最近一次添加的 省字典 通过@"city"键 找到对应得值(即市数组)

NSMutableArray * temp = [[procvinArr lastObject] objectForKey:@"city"];

[temp addObject:cityDic]; //将市字典  添加到市数组中

}

else if ([str hasPrefix:@"    "]) // 如果有四个空格的前缀

{

NSMutableArray * temp1 = [[procvinArr lastObject]objectForKey:@"city"];

[[[temp1 lastObject]objectForKey:@"nextCityName"]addObject:str];

//同上 取出市字典中的下级城市数组后 将下级城市的字符串添加进数组

}

}

//将省数组通过转码成JSON数据 保存在字符串中 即可打印出中文

NSString * s = [[NSString alloc]initWithData:[NSJSONSerialization dataWithJSONObject:procvinArr options:NSJSONWritingPrettyPrinted error:nil] encoding:NSUTF8StringEncoding];

NSLog(@"%@",s);

return 0;

}

时间: 2024-10-16 00:19:22

iOS - OC - NSDictionary NSArray - nest的相关文章

JSONModel 嵌套字典数组 JSONModel nest NSDictionary NSArray

JSONModel 嵌套字典数组  JSONModel nest NSDictionary NSArray

Xocde新特性--NSDictionary&&NSArray

#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) {     @autoreleasepool {         NSArray *arr1 = [NSArray arrayWithObjects:@"one",@"tow", nil];         //等价于         NSArray *arr2 = @[@"one",@&

c语言实现hashtable,类似C++的map和iOS的NSDictionary

跟线性数组和链表不同,HashTable是快速查找的数据结构.本文中的HashTable使用链表处理数组. 该HashTable可以指定table的长度,提供了遍历的方法.包括table的长度的选择也比较讲究. cp_int32 nPrime[MAX_HASH_PRIME_ARRAY_NUM] = { 17, 37, 79, 163, 331, 673, 1361 }; 就是说table的长度来取自上面这个数组.比如用户设定了200,那么table的长度就是331,找到第一次比输入值大的数值.可

IOS OC 多任务定时器 NSRunLoop 管理 NSTimer

下面有两种做法 1.使用日期组件 NSDateComponents 2.使用NSString 生成一个日期 //  创建一个日历对象 NSCalendar *calendar = [NSCalendar currentCalendar]; //  创建日期组件 NSDateComponents *dc = [[NSDateComponents alloc]init]; //  设置当前时间 [dc setCalendar: calendar]; [dc setYear: 2014]; [dc s

ios model字典 NSArray NSDictionary小结

ios model字典 #import <Foundation/Foundation.h> @interface AdObject : NSObject /// 广告ID @property (strong,nonatomic) NSString *adID; /// 广告图片的地址 @property (strong,nonatomic) NSString *imagePath; /// 广告标题 @property (strong,nonatomic) NSString *adTitle;

OC 解决NSArray、NSDictionary直接打印中文出现乱码的问题

在iOS开发中,经常需要查看数组中得元素是否是自己想要的,但是苹果并没有对直接打印数组中得中文作处理,直接打印就会出现一堆很讨厌的东西,解决其实很简单,就是需要通过为NSArray添加分类,重写 - (NSString *)descriptionWithLocale:(id)locale方法即可 代码如下: #import "NSArray+Log.h" @implementation NSArray (Log) - (NSString *)descriptionWithLocale:

IOS开发之旅-IOS常用数据结构NSArray、NSMutableArray、NSDictionary、NSMutableDictionary介绍

NSArray NSArray基本用法 void arrayTest1() { //数组初始化最后必须以nil结尾,表示数组元素结束 NSArray *array1 = [[NSArray alloc]initWithObjects:@"item0",@"item1",@"item2",@"item3",@"item4",nil]; NSLog(@"%@",array1); /*( it

OC中快速创建NSNumber NSDictionary NSArray的方法

NSNumber: @()     @小括号 或者        NSNumber * num = @3;    NSValue * value = @4; NSDictionary :@{} @大括号 NSArray :@[] @中括号

ios ——OC——NSArray的用法

NSArray 从本质上讲,NSArray 就是一个存放对象的容器. NSArray只能存储Objective-C 对象,而不能存储C语言中的基本数据类型,比如:int,flot,指针等. 在使用NSArray时,需特别注意,必须以nil 结尾.以此来代表结束. NSArray 创建的是静态数组,一旦创建之后,就再也不能添加和删除数组中的对象了. 1.NSArray的创建: 类方法创建数组: NSArray *array1 = [NSArray arrayWithObject:@"obj&quo