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);
NSDictionary、NSArray用法集锦_第1张图片
字典举例.png

字典的遍历(三种方法)


1.普通遍历NSDictionary

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

for (int i=0;  i

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=(
    "",
    "",
    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] 数组中的第零个元素是

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

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

输出结果

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

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

输出结果

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);
NSDictionary、NSArray用法集锦_第2张图片
字符串和数组的相互转化.png

集合和数组的相互转化

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

   // 数组
    NSArray *array = [NSArray arrayWithObjects:@"CoderZb",@"fuqiang",@"minzhu",nil];
    NSLog(@"数组: %@",array);
    // 数组转成集合
    NSSet *set = [NSSet setWithArray:array];
    NSLog(@"集合: %@",set);
NSDictionary、NSArray用法集锦_第3张图片
集合和数组的转化.png

你可能感兴趣的:(NSDictionary、NSArray用法集锦)