首页 > 代码库 > 黑马程序员-Foundation框架之数组和字典
黑马程序员-Foundation框架之数组和字典
一、Foundation框架简介
Foundation框架,顾名思义就是基础框架。基础框架上的类都是与用户界面无关的,为所有的程序开发提供一个基础。OC的基础框架常用的类包括:数组,字典,数字,字符串等以及它们的子类。要使用这个框架需要在引入头文件#import <Foundation/Foundation.h>
二、数组
NSArray类以及它的子类NSMutableArray,一个是不可变数组,一个是可变数组。下面通过代码来看一下它的一些基本的用法。
1 #import <Foundation/Foundation.h> 2 3 int main(int argc,const char* argv[]) 4 { 5 NSArray *arrayWithEmpty = [NSArray array]; // 创建一个空数组,这个数组永远为空 6 NSArray *array1 = [NSArray arrayWithObject:@"Himym!"]; // 创建非空数组,含一个元素 7 NSArray *array2 = [NSArray arrayWithObjects:@"Himym",@"Robb",nil]; // 创建非空数组,含多个元素,以nil结尾 8 NSArray *array3 = @[@"HImym",@"Baratheon",@"Miss Gao"]; // 快速创建一个对象 9 NSLog(@"array2 %ld",array2.count,array3.count); // 数组元素个数10 NSLog(@"%@",[array2 objectAtIndex:1]);11 NSLog(@"%@",array[2]); // 访问数组元素12 NSMutableArray *array4 = [NSMutableArray arrayWithObjects:@"Himym",@"Robb",nil];13 [array4 addObject:[[Person alloc] init]];14 [array4 addObject:@"NaNa"]; // 往数组里面添加元素15 [array4 removeObject:@"Miss Zhao"];16 [array4 removeObjectAtIndex:1];17 [array4 addObjectsFromArray:array2];18 for(id obj in array4) // 遍历数组19 {20 NSUInteger i = [array4 indexOfObject:obj];21 NSLog(@"%ld %@",i,obj);28 if(i == 2)29 *stop = YES;30 }];31 return 0;32 }
注意问题:
> @[] 只创建不可变数组NSArray,NSMutableArray *array = @[@"jack", @"rose"];是错误写法。
> 数组不能存放nil值;只能存放OC对象、不能存放非OC对象类型,比如int、struct、enum等。
三、字典
字典(NSDictionary,NSMutableDictionary)是由键-值对组成的数据集合。通过key来查找value,key可以是任意类型对象,但是其值必须是唯一的。
下面通过代码来看一下基本用法
1 #import <Foundation/Foundation.h> 2 3 int main(int argc, const char * argv[]) 4 { 5 6 // 创建字典 7 NSDictionary *dic1 = [NSDictionary dictionaryWithObject:@"Himym.Baratheon" forKey:@"name"]; 8 NSArray *name = @[@"Himym.Baratheon",@20]; 9 NSArray *key = @[@"name",@"age"];10 NSDictionary *dic2 = [NSDictionary dictionaryWithObjects:name forKeys:key];11 NSDictionary *dic3 = [NSDictionary dictionaryWithObjectsAndKeys:@"Ned.Start",@"name",@20,@"age", nil];12 13 // 快速创建14 NSDictionary *dic0 = @{@"name":@"Joffray.Lannister",@"age":@18}; // 注意是大括号15 NSLog(@"dic1 = %@\ndic2 = %@\ndic3 = %@\ndic0 = %@",dic1,dic2,dic3,dic0);16 17 // 取键值18 id obj1 = [dic0 objectForKey:@"name"];19 id obj2 = dic1[@"name"];20 NSLog(@"%@ %ld",obj1,obj2,dic0.count);21 22 // 创建可变字典23 NSMutableDictionary *mdic1 = [NSMutableDictionary dictionary];24 25 // 添加元素26 [mdic1 setObject:@"Robb.Stark" forKey:@"name"];27 [mdic1 setObject:@17 forKey:@"age"];28 [mdic1 setObject:@"He is dead" forKey:@"life"];29 [mdic1 setObject:@"Sansa" forKey:@"name"]; // 将原有name覆盖30 NSLog(@"%@",mdic1);31 32 // 取键值33 id obj3 = mdic1[@"name"];34 NSLog(@"%@",obj3);35 36 // 删除键值对37 [mdic1 removeObjectForKey:@"age"];38 39 // 遍历字典40 //NSArray *array1 = [mdic1 allValues];41 //NSLog(@"%@",array1);42 for(id obj in [mdic1 allValues])43 {44 NSLog(@"value %@",obj);50 }51 52 [mdic1 enumerateKeysAndObjectsUsingBlock:^(id key,id obj,BOOL *stop)53 {54 NSLog(@"key: %@ %@ key --- %@",obj,key);61 }62 63 // 字典元素的访问64 NSArray *person = @[65 @{@"name":@"Himym.Baratheon",@"age":@25,@"QQ":@"395696600",@"girlfrends":@[@"NaNa",@"ZhaoChao"]},66 @{@"name":@"Joffray.Lannister",@"age":@18},67 @{@"name":@"Ned.Stark",@"age":@31},68 @{@"name":@"Serse.Lannister",@"age":@24}69 ];70 NSDictionary *ned = person[2];71 NSString *nana = person[0][@"girlfrends"][1];72 NSArray *girl = person[0][@"girlfrends"];73 NSLog(@"%@\n%@\n%@",ned,nana,girl);74 75 return 0;76 }
注意的问题:
> 字典的快速创建是用大括号@{},这点有别于数组的快速创建@[]。并且快速创建只适用于NSDictionary。
> 字典里面的键值对是无序排列的,而数组里的元素是有序的。
黑马程序员-Foundation框架之数组和字典
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。