博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
OC Foundation框架—集合
阅读量:5755 次
发布时间:2019-06-18

本文共 7989 字,大约阅读时间需要 26 分钟。

Foundation框架—集合

一、NSArray和NSMutableArray

(一)NSArray不可变数组

(1)NSArray的基本介绍

NSArray是OC中使用的数组,是面向对象的,以面向对象的形式操纵对象,是不可变数组。

C语言数组有一个缺点即数组中只能存放同种数据类型的元素。

OC数组只能存放OC对象,不能存放非OC对象,如int,结构体和枚举等

OC数组实际是指针数组-oc对象是用指针指向的,数组实际存放的是指向oc对象的指针。

(2)NSArray的创建

 

1     //实例方法 2         NSArray *array = [[NSArray alloc] init]; 3         NSArray *array1 = [NSArray array]; 4          5         NSArray *array1 = [[NSArray alloc] initWithObjects:@"123",@"456", nil]; 6         NSArray *array3 = @[@"1234",@"5678"];//见到的时候要认识,但不推荐使用。 7         NSArray *array2 = [[NSArray alloc] initWithArray:array1]; 8         //打印数组 9         NSLog(@"array1:%@",array1);10         NSLog(@"array2:%@",array2);11         NSLog(@"array3:%@",array3);12 13     //类方法14         NSArray *array1 = [NSArray arrayWithObjects:@"456",@"123",@"789", nil];15         NSArray *array2 = [NSArray arrayWithArray:array1];

 

 

(3)NSArray的访问

 (4)NSArray的遍历

数组的遍历有以下几种方式:

首先创建一个数组

 

第一种方法:使用for循环遍历

 

 

Block遍历的深入研究:

每拿到一个元素,就传递给obj,就会调用一次block,并且把当前的元素和索引位置当做参数传递给block。

注意1:break只使用在两种场合,即switch和循环结构中。

注意2:stop参数用来停止遍历,其值若为YES,则停止。

 

(二)NSMutableArray可变数组

 

1.可变数组创建

1     //实例方法 2         NSMutableArray *array1 = [[NSMutableArray alloc] initWithObjects:@"1",@"2",@"3", nil]; 3         NSLog(@"array1 : %@",array1); 4          5         NSMutableArray *array2 = [[NSMutableArray alloc] initWithArray:array1]; 6         NSLog(@"array2 : %@",array2); 7          8         NSMutableArray *array3 = [[NSMutableArray alloc] initWithCapacity:10]; 9         NSInteger lgth = [array3 count];10         NSLog(@"%lu",lgth);11         12         NSMutableArray *array4 = [NSMutableArray array];13     类方法14         NSMutableArray *array1 = [NSMutableArray arrayWithObjects:@"4",@"5",@"6", nil];15         NSLog(@"array1:%@",array1);16         17         NSMutableArray *array2 = [NSMutableArray arrayWithArray:array1];18         NSLog(@"array2:%@",array2);19         20         NSMutableArray *array3 = [NSMutableArray arrayWithCapacity:10];21         NSLog(@"array3:%@",array3);

 

2.可变数组的使用 

1     (2)、操作可变数组元素 2         NSMutableArray *array1 = [[NSMutableArray alloc] initWithObjects:@"1",@"2",@"3", nil]; 3         NSInteger lgth = [array1 count]; 4         NSLog(@"length:%lu",lgth); 5         NSLog(@"array1:%@",array1); 6          7         [array1 addObject:@"4"]; 8 //        array1 addObjectsFromArray:<#(NSArray *)#> 9         lgth = [array1 count];10         NSLog(@"length:%lu",lgth);11         NSLog(@"array1:%@",array1);12 13         [array1 insertObject:@"4" atIndex:1];14         lgth = [array1 count];15         NSLog(@"length:%lu",lgth);16         NSLog(@"array1:%@",array1);17         18         [array1 replaceObjectAtIndex:1 withObject:@"10"];19         lgth = [array1 count];20         NSLog(@"length:%lu",lgth);21         NSLog(@"array1:%@",array1);22 23         [array1 removeObject:@"3"];24         [array1 removeObjectAtIndex:0];25         array1 removeObject:<#(id)#> inRange:<#(NSRange)#>26         [array1 removeLastObject];27         [array1 removeAllObjects];28         lgth = [array1 count];29         NSLog(@"length:%lu",lgth);30         NSLog(@"array1:%@",array1);

 

 

(1)NSMutableArray的基本使用

注意:NSMutableArray继承自NSArray,几乎拥有NSArray的一切方法。

 

 

二、NSSet和NSMutableSet

(一)NSSet不可变集合

基本使用:

 

(二)NSMutableSet可变集合

基本使用:

 

(三)NSSet和NSArray的对比

(1)共同点:

1)都是集合,都能够存放多个对象

2)只能存放oc对象,不能存放非oc对象类型(如int等基本数据类型和结构体,枚举等)。

3)本身都不可变,都有一个可变的子类。

(2)不同点:

1)NSArray有顺序,NSSet没有顺序

三、NSDictionary和NSMutableDictionary

(一)NSDictionary不可变字典

(1)介绍

现实中的字典:根据索引找到具体的内容

OC中的NSDictionary:根据key找到value。里面存储的东西都是键值对。

(2)NSDictionary的创建

 

注意:快速创建字典是编译器特性。

(3)NSDictionary的访问

//根据值找key

[newDic1 allKeysForObject:@"price"];

 

1         //OC字典 2         //NSDictionary和NSMutableDictionary 3         //键(key)-值(value) --->KVO设计模式,key-value-O** 4          5         //关于字典,key-value的顺序。字典是无序的,数组是有序的。 6         //一对键值 是字典的一个元素 7 //        NSDictionary *dic1 = [[NSDictionary alloc] initWithObjectsAndKeys:@"ET",@"name",@"1800+",@"age",@"Mars",@"address",@"Alians",@"sex", nil]; 8 //        NSLog(@"dic1:%@",dic1); 9 //        10 //        NSDictionary *dic2 = [[NSDictionary alloc] initWithDictionary:dic1];11 //        NSLog(@"dic2:%@",dic2);12 //        13 //        NSArray *objArr = @[@"Albert",@"M",@"China"];14 //        NSArray *keyArr = @[@"name",@"sex",@"country"];15 //        NSDictionary *dic3 = [[NSDictionary alloc] initWithObjects:objArr forKeys:keyArr];16 //        NSLog(@"dic3:%@",dic3);17         18         19 //        NSDictionary *dic = [[NSDictionary alloc] initWithObjectsAndKeys:@"ET",@"name",@"18",@"age",@"ET",@"Type", nil];20 //        NSLog(@"dic:%@",dic);21         22 23 //        NSString *valueForName = [dic objectForKey:@"sex"];24 //        NSLog(@"%@",valueForName);25 //        NSArray *objArr = [dic allValues];26 //        NSLog(@"objArr:%@",objArr);27         28         //ET29 //        NSArray *allKeysForObject = [dic allKeysForObject:@"ET"];30 //        NSLog(@"keyArr:%@",allKeysForObject);31         //32 //        NSArray *allKeys = [dic allKeys];33 //        NSString *value0 = [dic objectForKey:[allKeys objectAtIndex:0]];34 //        NSString *value1 = [dic objectForKey:[allKeys objectAtIndex:1]];35 //        NSLog(@"value0:%@,value1:%@",value0,value1);36         37 //        NSString *tempValue = [dic valueForKey:@"name"];38 //        NSLog(@"%@",tempValue);39 40         41         //可变字典42 //        NSMutableDictionary *dic = [[NSMutableDictionary alloc] initWithObjectsAndKeys:@"value1",@"key1",@"value2",@"key2",@"value3",@"key3",@"value4",@"key4", nil];43 //        NSLog(@"%@",dic);44 //        45 //        NSDictionary *tempDic = [[NSDictionary alloc] initWithObjectsAndKeys:@"value1",@"key1",@"valueHeHeDa",@"key2", nil];46 //        [dic setValuesForKeysWithDictionary:tempDic];47 //        NSLog(@"%@",dic);48         49 //        [dic setObject:@"value5" forKey:@"key1"];50 //        NSLog(@"%@",dic);51         //52 //        [dic setObject:@"value3" forKey:@"key3"];53 //        NSLog(@"%@",dic);54         //55 //        NSDictionary *tempDic = [[NSDictionary alloc] initWithObjectsAndKeys:@"value3",@"key3",@"value4",@"key4", nil];56 //        [dic setValuesForKeysWithDictionary:tempDic];57 //        NSLog(@"%@",dic);58         //59 //        [dic removeObjectForKey:@"key1"];60 //        NSLog(@"%@",dic);61         62 //        NSArray *keyArray = [NSArray arrayWithObjects:@"key3",@"key4", nil];63 //        [dic removeObjectsForKeys:keyArray];64 //        NSLog(@"%@",dic);65         66 //        [dic removeAllObjects];67 //        NSLog(@"%@",dic);68         69 //        NSMutableDictionary *dic = [[NSMutableDictionary alloc] initWithObjectsAndKeys:@"value1",@"key1",@"value2",@"key2",@"value3",@"key3",@"value4",@"key4", nil];70 //        71 //        NSArray *dicKeys = [dic allKeys];72 //        NSInteger dicLength = [dicKeys count];73 //        NSLog(@"keys->length: %lu",dicLength);74 //        75 //        NSInteger realDicLength = [dic count];76 //        NSLog(@"straight: %lu",realDicLength);

 

 

(4)NSDictionary的遍历

 

(二)NSMutableDictionary可变字典

(1)NSMutableDictionary的基本使用

 

(2)NSMutableDictionary的使用注意

 

注意:这种快速创建的方式只适用于不可变字典。

        字典不允许有相同的key,但允许有相同的value(Object)

三、字典数组(制作通讯录等)

 

1  1 #import 
2 2 3 3 int main() 4 4 { 5 5 6 6 // 字典数组 7 7 NSArray *persons = @[ 8 8 @{
@"name" : @"jack", @"qq" : @"432423423", @"books": @[@"5分钟突破iOS编程", @"5分钟突破android编程"]}, 9 9 @{
@"name" : @"rose", @"qq" : @"767567"},10 10 @{
@"name" : @"jim", @"qq" : @"423423"},11 11 @{
@"name" : @"jake", @"qq" : @"123123213"}12 12 ];13 13 14 14 // 15 15 // NSDictionary *jim = persons[2];16 16 17 17 18 18 // 19 19 NSString *bookName = persons[0][@"books"][1];20 20 NSLog(@"%@", bookName);21 21 //NSArray *array = persons[0][@"books"];22 22 23 23 //NSLog(@"%@", array);24 24 25 25 // 先取出1位置对应的字典26 26 // 再取出字典中qq这个key对应的数据27 27 //NSLog(@"%@", persons[1][@"qq"]);28 28 29 29 // NSLog(@"%@", jim);30 30 return 0;31 31 }

 

转载地址:http://hyckx.baihongyu.com/

你可能感兴趣的文章
Mysql拒绝远程访问的解决方法
查看>>
【MySQL运维】MySQL多实例部署案例
查看>>
一种码位倒置算法
查看>>
linux 设备驱动
查看>>
MySQL 5.5 on CentOS/RHEL 6.7
查看>>
SQL Server 2017 AlwaysOn on Linux 配置和维护(13)
查看>>
Linux下Mysql二进制安装过程
查看>>
我的友情链接
查看>>
孤独的走过年轻
查看>>
关于ios中的setNeedsDisplay和setNeedsLayout
查看>>
C 文件读写
查看>>
【C#】TreeView应用
查看>>
How to convert Windows 7 on MBR/BIOS to GPT/UEFI
查看>>
我的友情链接
查看>>
>hibernate-session中的方法
查看>>
Advanced+Apple+Debugging(9)
查看>>
linux 病毒virus解毒
查看>>
linux下一键编译搭建mysql服务器脚本
查看>>
jqprint导入jqgrid表格时,内容溢出的原因以及解决方法
查看>>
×××keykeriki项目
查看>>