OC Foundation框架—集合
Foundation框架—集合
一、NSArray和NSMutableArray
(一)NSArray不可变数组
(1)NSArray的基本介绍
NSArray是OC中使用的数组,是面向对象的,以面向对象的形式操纵对象,是不可变数组。
C语言数组有一个缺点即数组中只能存放同种数据类型的元素。
OC数组只能存放OC对象,不能存放非OC对象,如int,结构体和枚举等
OC数组实际是指针数组-oc对象是用指针指向的,数组实际存放的是指向oc对象的指针。
(2)NSArray的创建
- //实例方法
- NSArray *array = [[NSArray alloc] init];
- NSArray *array1 = [NSArray array];
- NSArray *array1 = [[NSArray alloc] initWithObjects:@"",@"", nil];
- NSArray *array3 = @[@"",@""];//见到的时候要认识,但不推荐使用。
- NSArray *array2 = [[NSArray alloc] initWithArray:array1];
- //打印数组
- NSLog(@"array1:%@",array1);
- NSLog(@"array2:%@",array2);
- NSLog(@"array3:%@",array3);
- //类方法
- NSArray *array1 = [NSArray arrayWithObjects:@"",@"",@"", nil];
- NSArray *array2 = [NSArray arrayWithArray:array1];
(3)NSArray的访问
(4)NSArray的遍历
数组的遍历有以下几种方式:
首先创建一个数组
第一种方法:使用for循环遍历
Block遍历的深入研究:
每拿到一个元素,就传递给obj,就会调用一次block,并且把当前的元素和索引位置当做参数传递给block。
注意1:break只使用在两种场合,即switch和循环结构中。
注意2:stop参数用来停止遍历,其值若为YES,则停止。
(二)NSMutableArray可变数组
1.可变数组创建
- //实例方法
- NSMutableArray *array1 = [[NSMutableArray alloc] initWithObjects:@"",@"",@"", nil];
- NSLog(@"array1 : %@",array1);
- NSMutableArray *array2 = [[NSMutableArray alloc] initWithArray:array1];
- NSLog(@"array2 : %@",array2);
- NSMutableArray *array3 = [[NSMutableArray alloc] initWithCapacity:];
- NSInteger lgth = [array3 count];
- NSLog(@"%lu",lgth);
- NSMutableArray *array4 = [NSMutableArray array];
- 类方法
- NSMutableArray *array1 = [NSMutableArray arrayWithObjects:@"",@"",@"", nil];
- NSLog(@"array1:%@",array1);
- NSMutableArray *array2 = [NSMutableArray arrayWithArray:array1];
- NSLog(@"array2:%@",array2);
- NSMutableArray *array3 = [NSMutableArray arrayWithCapacity:];
- NSLog(@"array3:%@",array3);
2.可变数组的使用
- ()、操作可变数组元素
- NSMutableArray *array1 = [[NSMutableArray alloc] initWithObjects:@"",@"",@"", nil];
- NSInteger lgth = [array1 count];
- NSLog(@"length:%lu",lgth);
- NSLog(@"array1:%@",array1);
- [array1 addObject:@""];
- // array1 addObjectsFromArray:<#(NSArray *)#>
- lgth = [array1 count];
- NSLog(@"length:%lu",lgth);
- NSLog(@"array1:%@",array1);
- [array1 insertObject:@"" atIndex:];
- lgth = [array1 count];
- NSLog(@"length:%lu",lgth);
- NSLog(@"array1:%@",array1);
- [array1 replaceObjectAtIndex: withObject:@""];
- lgth = [array1 count];
- NSLog(@"length:%lu",lgth);
- NSLog(@"array1:%@",array1);
- [array1 removeObject:@""];
- [array1 removeObjectAtIndex:];
- array1 removeObject:<#(id)#> inRange:<#(NSRange)#>
- [array1 removeLastObject];
- [array1 removeAllObjects];
- lgth = [array1 count];
- NSLog(@"length:%lu",lgth);
- 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"];
- //OC字典
- //NSDictionary和NSMutableDictionary
- //键(key)-值(value) --->KVO设计模式,key-value-O**
- //关于字典,key-value的顺序。字典是无序的,数组是有序的。
- //一对键值 是字典的一个元素
- // NSDictionary *dic1 = [[NSDictionary alloc] initWithObjectsAndKeys:@"ET",@"name",@"1800+",@"age",@"Mars",@"address",@"Alians",@"sex", nil];
- // NSLog(@"dic1:%@",dic1);
- //
- // NSDictionary *dic2 = [[NSDictionary alloc] initWithDictionary:dic1];
- // NSLog(@"dic2:%@",dic2);
- //
- // NSArray *objArr = @[@"Albert",@"M",@"China"];
- // NSArray *keyArr = @[@"name",@"sex",@"country"];
- // NSDictionary *dic3 = [[NSDictionary alloc] initWithObjects:objArr forKeys:keyArr];
- // NSLog(@"dic3:%@",dic3);
- // NSDictionary *dic = [[NSDictionary alloc] initWithObjectsAndKeys:@"ET",@"name",@"18",@"age",@"ET",@"Type", nil];
- // NSLog(@"dic:%@",dic);
- // NSString *valueForName = [dic objectForKey:@"sex"];
- // NSLog(@"%@",valueForName);
- // NSArray *objArr = [dic allValues];
- // NSLog(@"objArr:%@",objArr);
- //ET
- // NSArray *allKeysForObject = [dic allKeysForObject:@"ET"];
- // NSLog(@"keyArr:%@",allKeysForObject);
- //
- // NSArray *allKeys = [dic allKeys];
- // NSString *value0 = [dic objectForKey:[allKeys objectAtIndex:0]];
- // NSString *value1 = [dic objectForKey:[allKeys objectAtIndex:1]];
- // NSLog(@"value0:%@,value1:%@",value0,value1);
- // NSString *tempValue = [dic valueForKey:@"name"];
- // NSLog(@"%@",tempValue);
- //可变字典
- // NSMutableDictionary *dic = [[NSMutableDictionary alloc] initWithObjectsAndKeys:@"value1",@"key1",@"value2",@"key2",@"value3",@"key3",@"value4",@"key4", nil];
- // NSLog(@"%@",dic);
- //
- // NSDictionary *tempDic = [[NSDictionary alloc] initWithObjectsAndKeys:@"value1",@"key1",@"valueHeHeDa",@"key2", nil];
- // [dic setValuesForKeysWithDictionary:tempDic];
- // NSLog(@"%@",dic);
- // [dic setObject:@"value5" forKey:@"key1"];
- // NSLog(@"%@",dic);
- //
- // [dic setObject:@"value3" forKey:@"key3"];
- // NSLog(@"%@",dic);
- //
- // NSDictionary *tempDic = [[NSDictionary alloc] initWithObjectsAndKeys:@"value3",@"key3",@"value4",@"key4", nil];
- // [dic setValuesForKeysWithDictionary:tempDic];
- // NSLog(@"%@",dic);
- //
- // [dic removeObjectForKey:@"key1"];
- // NSLog(@"%@",dic);
- // NSArray *keyArray = [NSArray arrayWithObjects:@"key3",@"key4", nil];
- // [dic removeObjectsForKeys:keyArray];
- // NSLog(@"%@",dic);
- // [dic removeAllObjects];
- // NSLog(@"%@",dic);
- // NSMutableDictionary *dic = [[NSMutableDictionary alloc] initWithObjectsAndKeys:@"value1",@"key1",@"value2",@"key2",@"value3",@"key3",@"value4",@"key4", nil];
- //
- // NSArray *dicKeys = [dic allKeys];
- // NSInteger dicLength = [dicKeys count];
- // NSLog(@"keys->length: %lu",dicLength);
- //
- // NSInteger realDicLength = [dic count];
- // NSLog(@"straight: %lu",realDicLength);
(4)NSDictionary的遍历
(二)NSMutableDictionary可变字典
(1)NSMutableDictionary的基本使用
(2)NSMutableDictionary的使用注意
注意:这种快速创建的方式只适用于不可变字典。
字典不允许有相同的key,但允许有相同的value(Object)
三、字典数组(制作通讯录等)
- #import <Foundation/Foundation.h>
- int main()
- {
- // 字典数组
- NSArray *persons = @[
- @{@"name" : @"jack", @"qq" : @"", @"books": @[@"5分钟突破iOS编程", @"5分钟突破android编程"]},
- @{@"name" : @"rose", @"qq" : @""},
- @{@"name" : @"jim", @"qq" : @""},
- @{@"name" : @"jake", @"qq" : @""}
- ];
- //
- // NSDictionary *jim = persons[2];
- //
- NSString *bookName = persons[][@"books"][];
- NSLog(@"%@", bookName);
- //NSArray *array = persons[0][@"books"];
- //NSLog(@"%@", array);
- // 先取出1位置对应的字典
- // 再取出字典中qq这个key对应的数据
- //NSLog(@"%@", persons[1][@"qq"]);
- // NSLog(@"%@", jim);
- return ;
- }
OC Foundation框架—集合的更多相关文章
- Foundation框架—集合
Foundation框架—集合 一.NSArray和NSMutableArray (一)NSArray不可变数组 (1)NSArray的基本介绍 NSArray是OC中使用的数组,是面向对象的,以面向 ...
- 李洪强iOS开发之Foundation框架—集合
Foundation框架—集合 一.NSArray和NSMutableArray (一)NSArray不可变数组 (1)NSArray的基本介绍 NSArray是OC中使用的数组,是面向对象的,以面向 ...
- iOS - OC Foundation 框架
前言 框架是由许多类.方法.函数和文档按照一定的逻辑组织起来的集合,以使研发程序更容易. Foundation 框架:为所有程序开发奠定基础的框架称为 Foundation 框架. Cocoa :是指 ...
- OC Foundation框架—结构体
一.基本知识 Foundation—基础框架.框架中包含了很多开发中常用的数据类型,如结构体,枚举,类等,是其他ios框架的基础. 如果要想使用foundation框架中的数据类型,那么包含它的主头文 ...
- OC Foundation框架—字符串
一.Foundation框架中一些常用的类 字符串型: NSString:不可变字符串 NSMutableString:可变字符串 集合型: 1) NSArray:OC不可变数组 NSMutableA ...
- [OC Foundation框架 - 22] 集合的内存管理
A.集合的手动内存管理 NSArray addObject: 加入的元素执行一次retain removeObject: 被删除的元素执行一次release removeAllObjects: 所有元 ...
- [OC Foundation框架 - 21] NSSet集合 & 集合之间的转换
A.NSSet 跟NSArray一样,不可变 NSArray 自然顺序 NSSet是无序的 NSSet不允许存入重复元素,可以用来过滤重复元素 也有可变的NSMutableSet B.集合转换 ...
- [OC Foundation框架 - 20] 统计代码行数
注意: 1.变量名和函数名不要混淆调用 2.不要对文件夹进行文件的操作,没有权限 3.递归调用注意初始化变量 // // main.m // CodeLineCount // // Created ...
- OC — (Foundation框架-NSDate)
NSDate:是OC中处理日期时间的一个类,可以用来表示时间 获取当前的时间 NSDate *d = [NSDate date]; 创建日期时间对象 NSLog输出是当前时间 格林时间 格式化显示时间 ...
随机推荐
- 1、初始Java应用程序
Java Application程序,也称为Java应用程序,是可独立的应用程序.该类程序以main()方法作为入口,由独立的Java解释器加载执行. 下面的列子是一个简单的Java应用程序. imp ...
- JavaScript 实现省市二级联动
JavaScript 实现省市二级联动 版权声明:未经授权,严禁转载! 案例代码 <style> .hide { display: none; } </style> <s ...
- 删除string类型字符串中指定字符串段
1.实现背景 在插入list行时用邮件的MessageID给对应行命名. 在回复全部邮件时,收件人变为之前收件人中出去“自己”同时加入之前发件人,抄送人还是之前的抄送人,密送人不用管,直接不用带. 在 ...
- Go第八篇之包的使用
Go 语言的源码复用建立在包(package)基础之上.Go 语言的入口 main() 函数所在的包(package)叫 main,main 包想要引用别的代码,必须同样以包的方式进行引用,本章内容将 ...
- shell编程学习笔记之特殊变量($0、$1、$2、 $?、 $# 、$@、 $*)
特殊变量($0.$1.$2. $?. $# .$@. $*) shell编程中有一些特殊的变量可以使用.这些变量在脚本中可以作为全局变量来使用. 名称 说明 $0 脚本名称 $1-9 脚本执行时的参数 ...
- cygwin下使用apt-cyg安装新软件
1.获取 (记得先安装好git) git clone https://github.com/transcode-open/apt-cyg.git 2.安装apt-cyg cd apt-cyg chm ...
- PHP中namespace和use使用详解
来源于:http://www.jb51.net/article/36389.htm 命名空间一个最明确的目的就是解决重名问题,PHP中不允许两个函数或者类出现相同的名字,否则会产生一个致命的错误.这种 ...
- ubuntu12 root账户自动登录
Ubuntu为了系统安全,root帐号的密码是随机的,如果临时需要提升至root权限以执行一些命令,需要使用sudo命令.产线上有几台使用Ubuntu的机器,因为使用者不固定,并且执行程序时需要使 用 ...
- 论文笔记——Channel Pruning for Accelerating Very Deep Neural Networks
论文地址:https://arxiv.org/abs/1707.06168 代码地址:https://github.com/yihui-he/channel-pruning 采用方法 这篇文章主要讲诉 ...
- C#学习笔记(十四):多态、虚方法和抽象类
虚方法/非虚方法 < 实例方法 = 非静态方法 = 非类方法(非实例方法 = 静态方法 = 类方法) 函数签名(参数列表,或参数列表 + 返回类型) using System; using Sy ...