NSDictionary、NSArray用法集锦

valueforkey和objectforkey区别


1.objectforkey 是NSDictionary的方法,valueforkey 是KVC的方法

2.两者都是键值对应

3.区别是valueforkey只允许使用NSString类型,objectforkey可以是任意类型.

定义数组和定义字典的区别

1.定义字典


 NSDictionary *dict3=@{@"key":@"value",@"key":@"value"};

2.定义数组的形式一(注:指针对象必须得创建出来)

NSArray *array3=@[指针对象,NSNumber,@整形,@"字符串",nil];

3.定义数组的形式二

NSArray *array3=[NSArray arrayWithObjects:指针对象,NSNumber,@整形,@"字符串",nil];的

4.总结:从123可以得治字典中的对象都是字符串类型;数组中可以存放任意类型,只要OC支持的类型


关于字典、数组书写格式的相关简写(超重点)


1.数组的简写、全写

NSArray *str6=@[@"zhangbin",@"zb",@"ls",@"mz"];//简写形式
NSArray *arr4=[NSArray arrayWithObjects:@"zhangbin",@"zb",@"ls",@"mz",nil];//全写形式

2.NSDictionary获取元素的简写(可变字典也同样适用)

dict[@"name"];//简写      精华:根据key获取value元素
[dict objectForKey:@"name"];//全写

3.修改字典中的数据

dicM[@"age"]=@"100"; //简写   相当于赋值
[dicM setObject:@"100" forKey:@"age"];// 全写

4.基本数据类型转换为对象类型的简写 判断对象类型:对象前面有*

int age=10;

NSNumber *temp3=@(age);//简写

NSLog(@"%@",temp3);

等价于

int age=10;

NSNumber *ageN=[NSNumber numberWithInt:age];//全写

NSLog(@"%@",ageN);

创建字典(简写繁写)


1.利用字典创建一个key value

NSDictionary *dict3=@{@"name":@"zb"};//创建字典

NSLog(@"%@",dict3[@"name"]);//获取字典中key对应的value

等价于

NSDictionary *dict1 = [NSDictionary dictionaryWithObject:@"zb" forKey:@"name"];//key是为了方便找到Object。类似于提供偏旁部首是为了快速找到汉字

NSString *name1 = [dict1 objectForKey:@"name"];

NSLog(@"name是%@",name1);

2.利用字典创建多个key value

NSDictionary *dict4=@{@"name":@"zb",@"age":@"23",@"height":@"1.70"};

NSLog(@"%@ %@ %@",dict4[@"name"],dict4[@"age"],dict4[@"height"]);

等价于

NSDictionary *dict2=[NSDictionary dictionaryWithObjects:@[@"zb",@"23",@"1.70"] forKeys:@[@"name",@"age",@"height"]];

NSLog(@"%@,%@,%@",[dict2 objectForKey:@"name"],[dict2 objectForKey:@"age"],[dict2 objectForKey:@"height"]);


字典应用举例

    NSDictionary *dict3=@{@"Age":@"100",@"Name":@"CoderZb"};
    NSMutableDictionary *dictionary = [NSMutableDictionary dictionaryWithDictionary:dict3];
    NSLog(@"修改之前的字典中的数据: %@",dictionary);
    [dictionary setValue:@"18" forKey:@"Age"];
    NSLog(@"修改之后的字典中的数据: %@",dictionary);
字典举例.png

字典的遍历(三种方法)


1.普通遍历NSDictionary

NSDictionary *dict5 = @{@"name":@"zb",@"age":@"18",@"height":@"170"};

for (int i=0;  i<dict5.count; ++i) {
//取出字典中所有的key放到数组中keys中

NSArray *keys=[dict5 allKeys];

//根据数组中的下标i,取出数组中相应位置的key

NSString *key=keys[i];

//根据字典中的key取出唯一与之对应的value

NSString *value=dict5[key];

//打印数组中的每个key,以及每个key对应的value

NSLog(@"key = %@,value = %@",key,value);

}

2.快速遍历NSDictionary

NSDictionary *dict = @{@"name":@"zb",@"age":@"18",@"height":@"170"};

for (NSString *key in dict) {

NSLog(@"key = %@ ,value = %@",key,dict[key]);

}


3.利用block遍历NSDictionary(迭代器的方法)

NSDictionary *dict = @{@"name":@"zb",@"age":@"18",@"height":@"170"};

[dict enumerateKeysAndObjectsUsingBlock:^(NSString *key, NSString *obj,BOOL *stop){//obj换成value,输出也必须换成value

NSLog(@" key = %@, value = %@",key,obj);

}];


将字典写入到plist文件,并且读取plist文件



// 写入到plist文件

NSDictionary *dict6=@{@"name":@"zb",@"age":@"23",@"height":@"1.70"};

[dict6 writeToFile:@"/Users/zhangbin/Documents/heihei.plist" atomically:YES];

// 读取plist文件

NSDictionary *newDict=[NSDictionary dictionaryWithContentsOfFile:@"/Users/zhangbin/Documents/heihei.plist"];

NSLog(@"%@",newDict);


数组NSArray


1.传送一个字符串

NSArray *arr1=[NSArray arrayWithObject:@"zb"];

NSLog(@"%@",arr1);

输出结果


20160420 17:19:02.897 NSArray基本概念[22397:1156539] (
zb
)

2.传送多个字符串 数组中的nil是结束符.所以数组中的zb5,zb6不打印

NSArray *arr2=[NSArray arrayWithObjects:@"zb",@"zb2",@"zb3",@"zb4",nil,@"zb5",@"zb6",nil];

NSLog(@"%@",arr2);

输出结果

20160420 17:19:02.898 NSArray基本概念[22397:1156539] (

zb,

zb2,

zb3,

zb4

)

3.OC中的数组NSArray可以存储不同类型的数据

Person *p=[[Person alloc]init];

NSObject *obj=[[NSObject alloc]init];

NSArray *arr3=[NSArray arrayWithObjects:p,obj,@"zb",nil];

NSLog(@"arr3=%@",arr3);

输出结果

2016-04-20 17:19:02.899 NSArray基本概念[22397:1156539] arr3=(
    "<Person: 0x1004000e0>",
    "<NSObject: 0x100400130>",
    zb
)

5.获取数组中元素的个数

NSLog(@"count=%lu",[arr3 count]);

输出结果

20160420 17:19:02.899 NSArray基本概念[22397:1156539] count=3

6.获取数组中第零个元素

NSLog(@"数组中的第零个元素是%@",[arr3 firstObject]);

输出结果

2016-04-20 17:19:02.899 NSArray基本概念[22397:1156539] 数组中的第零个元素是<Person: 0x1004000e0>

7.获取数组中第一个元素

NSLog(@"数组中第一个元素是%@",[arr3 objectAtIndex:1]);

输出结果

2016-04-20 17:19:02.899 NSArray基本概念[22397:1156539] 数组中第一个元素是<NSObject: 0x100400130>

8.获取数组中最后一个元素

NSLog(@"数组中最后一个元素是%@",[arr3 lastObject]);

输出结果

2016-04-20 17:19:02.899 NSArray基本概念[22397:1156539] 数组中最后一个元素是zb

9.OC中的数组包含字符串的方法

NSArray *arr4=[NSArray arrayWithObjects:@"zhangbin",@"zb",@"ls",@"mz",nil];

if ([arr4 containsObject:@"zb"]) {

NSLog(@"arr4中包含zb");

}else{

NSLog(@"arr4中不包含zb");

}

输出结果

2016-04-20 17:19:02.899 NSArray基本概念[22397:1156539] arr4中包含zb

10.获取数组元素的常规写法与简写

10.1常规写法:

NSArray *arr6=@[@"zhangbin",@"zb",@"ls",@"mz"];
NSLog(@"%@",[arr6 objectAtIndex:0]);// 方法1

输出结果

20160420 17:19:02.899 NSArray基本概念[22397:1156539] zhangbin

10.2简写:

NSArray *arr6=@[@"zhangbin",@"zb",@"ls",@"mz"];
NSLog(@"%@",arr6[0]);// 方法2

输出结果

20160420 17:19:02.899 NSArray基本概念[22397:1156539] zhangbin

replaceObjectAtIndex:withObject:用法

NSMutableArray *array = @[@"ZZZ",@"BBB",@NO];
[array replaceObjectAtIndex:2 withObject:@YES];//  将下标为2的那个元素@NO替换成了@YES.


数组的遍历(四种方法)


1.第一种方法

NSArray *arr1=@[@"zhangbin",@"zb",@"ls",@"mz"];

//常规的遍历

 for (int i=0; i<arr1.count;++i) {
NSLog(@"arr1[%i]=%@",i,arr1[i]);

}

输出结果

2016-04-20 16:15:51.024 NSArray遍历[21205:1111570] arr1[0]=zhangbin
2016-04-20 16:15:51.025 NSArray遍历[21205:1111570] arr1[1]=zb
2016-04-20 16:15:51.025 NSArray遍历[21205:1111570] arr1[2]=ls
2016-04-20 16:15:51.026 NSArray遍历[21205:1111570] arr1[3]=mz

2.第二种方法


NSArray *arr2=@[@"zhangbin",@"zb",@"ls",@"mz"];

//for循环增强,实现遍历 敲入forin(中间无空格),按住回车,可自动显示for in的格式

//OC的数组可以增强for循环来遍历。逐个取出arr2中的元素,将取出的元素赋值给obj2.

//注意:obj2的类型不一定是NSObject,类型是由数组中元素的类型决定的。所以obj2的类型换成NSString类型也可以。

for (NSObject *obj2 in arr2) {

NSLog(@"obj2=%@",obj2);

}

输出结果

20160420 16:15:51.026 NSArray遍历[21205:1111570] obj2=zhangbin

20160420 16:15:51.026 NSArray遍历[21205:1111570] obj2=zb

20160420 16:15:51.026 NSArray遍历[21205:1111570] obj2=ls

20160420 16:15:51.026 NSArray遍历[21205:1111570] obj2=mz

3.第三种方法

NSArray *arr3=@[@"zhangbin",@"zb",@"ls",@"mz"];

//使用OC数组的迭代器来遍历

//每取出一个元素就会调用一次block,每次调用block都会将当前取出的元素和元素对应的所以传递给我们

//obj3就是当前取出的元素,idx就是当前元素对应的索引.

//stop用于控制什么时候停止遍历

[arr3 enumerateObjectsUsingBlock:^(id obj3,NSUInteger idx,BOOL *stop){

NSLog(@"obj3=%@,idx=%lu",obj3,idx);

}];

输出结果


20160420 16:15:51.026 NSArray遍历[21205:1111570] obj3=zhangbin,idx=0

20160420 16:15:51.026 NSArray遍历[21205:1111570] obj3=zb,idx=1

20160420 16:15:51.026 NSArray遍历[21205:1111570] obj3=ls,idx=2

20160420 16:15:51.026 NSArray遍历[21205:1111570] obj3=mz,idx=3

4.第四种方法

NSArray *arr4=@[@"zhangbin",@"zb",@"ls",@"mz"];

[arr4 enumerateObjectsUsingBlock:^(id obj4,NSUInteger idx,BOOL *stop){

if (idx==1) {//索引遍历到1时,就把YES赋值给stop,即停止遍历.后面的idx==2,idx==3不再遍历了。

*stop=YES;

}

NSLog(@"obj4=%@,idx=%lu",obj4,idx);

}];

输出结果

20160420 16:15:51.026 NSArray遍历[21205:1111570] obj4=zhangbin,idx=0

20160420 16:15:51.026 NSArray遍历[21205:1111570] obj4=zb,idx=1


数组+字典综合运用


NSArray *BookData = @[   //6个字典

@{@"icon": @"HistoryBooks", @"name": @"历史书"},

@{@"icon": @"ChineseBooks", @"name": @"语文书"},

@{@"icon": @"MathBooks", @"name": @"数学书"},

@{@"icon": @"GeographyBooks", @"name": @"地理书"},

@{@"icon": @"BiologyBooks", @"name": @"生物书"},

@{@"icon": @"ChemistryBooks", @"name": @"化学书"}

];

// 将数组中的对象(字典)写入到plist文件

[shopData writeToFile:@"/Users/zhangbin/Desktop/未命名文件夹 2/zb.plist" atomically:YES];

// 读取plist文件中的对象(字典)

NSArray *newArray=[NSArray arrayWithContentsOfFile:@"/Users/zhangbin/Desktop/未命名文件夹 2/zb.plist"];

NSLog(@"%@",newArray);

}

@end


字符串和数组的相互转化

    /****************************字符串转成数组*************************************/
    NSString *Str = [NSString stringWithFormat:@"My,Hobby,Is,Running"];
    // 字符串转数组(以逗号分隔)
    NSArray *StrToArray = [Str componentsSeparatedByString:@","];
    NSLog(@"字符串转成数组: %@",StrToArray);
    
    /*****************************数组转成字符串案例1************************************/
    NSMutableArray *arrayM = [NSMutableArray arrayWithObjects:@"Coder",@"Zb",nil];
    // 移除@"Coder",这样可变数组中只有@[@"Zb",nil];
    [arrayM removeObject:[NSString stringWithFormat:@"Coder"]];
    // 数组转成字符串(以逗号分隔).arrayM只有一个@"Zb"对象,正是因为nil的出现,才能以逗号分隔,可见nil的重要性
    NSString *ArrayToStr = [arrayM componentsJoinedByString:@","];
    NSLog(@"数组转成字符串案例1: %@",ArrayToStr);
    
    /*****************************数组转成字符串案例2************************************/
    NSMutableArray *ArrM = [NSMutableArray arrayWithObjects:@"Coder",@"Zb",@"Add",nil];
    // 数组转成字符串(以逗号分隔)
    NSString *ArrMyToStr = [ArrM componentsJoinedByString:@","];
    // 注意:打印的字符串之间是有逗号的。这就是案例2的目的。
    NSLog(@"数组转成字符串案例2: %@",ArrMyToStr);
字符串和数组的相互转化.png

集合和数组的相互转化

区别:集合比数组多了一层{ }

   // 数组
    NSArray *array = [NSArray arrayWithObjects:@"CoderZb",@"fuqiang",@"minzhu",nil];
    NSLog(@"数组: %@",array);
    // 数组转成集合
    NSSet *set = [NSSet setWithArray:array];
    NSLog(@"集合: %@",set);
集合和数组的转化.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 198,082评论 5 464
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,231评论 2 375
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 145,047评论 0 327
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,977评论 1 268
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,893评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,014评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,976评论 3 388
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,605评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,888评论 1 293
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,906评论 2 314
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,732评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,513评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,980评论 3 301
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,132评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,447评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,027评论 2 343
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,232评论 2 339

推荐阅读更多精彩内容

  • 它经常到我梦里来,皮毛是亮晶晶的橙红色,泛着温柔的光,鼻子噘得老高,滴溜转的眸子里隐隐显出紫色,也许藏着两颗神秘的...
    亲爱的园长阅读 831评论 3 3
  • 我写这篇手记的时候,天是暗的,风是凉的,此外,我本该至少描个路人百态的轮廓,但是你得知道,那太费功夫,倒不是我的时...
    饭团小贩阅读 170评论 0 0
  • Date:2017.04.24 Type:JPEG2000 Memory Corruption lead to R...
    vul404阅读 288评论 0 0