您的位置:首页 > 职场人生

黑马程序员----OC语法之简明扼要的总结二

2015-09-17 15:55 495 查看
--------------培训 学习型 博客,请多指教-----------------------------

第五节 数组、字典、集合

知识点
注意事项
容器简介
容器类,管理一组对象类型的数据.

iOS中存放数据的容器类都称为集合
数组简介
OC中数组是有序集合,只能存放对象类型;

数组有下标(index)的概念,靠下标查找元素,下标从0开始;

数组分不可变数组(NSArray)和可变数组(NSMutableArray).
不可变数组
数组的创建;

获取数组元素个数;

根据index获取数组中对象;
不可变数组(NSArray)的创建
常用实例方法:—initWithObjects:

常用便利构造器:+arrayWithObjects:
获取元素个数,根据index获取对象
获取元素个数:—count

根据index获取对象:—objectAtIndex:
可变数组(NSMutableArray)
NSMutableArray是NSArray的子类,继承了NSArray的所有方法

可变数组可以在数组本身基础进行增,删,改,查等操作.

常用方法:

创建数组对象;

添加元素,插入元素;

删除元素,替换元素;

交换指位置的两个元素;
(可变数组)NSMutableArray的创建
实例方法:

- initWithCapacity:

- initWithObjects:

便利构造器:

+ arrayWithCapacity:

+ arrayWithObjects:
添加元素,插入元素
添加元素:

- addObject:

插入元素:

- insertObject:atIndex:
删除元素,替换元素
删除元素:

- removeObjectAtIndex:

- removeLastObject:

- removeAllObjects:

替换元素:

- replaceObjectAtIndex:withObject:
交换指定位置的两个元素
- exchangeObjectAtIndex:withObjectAtIndex:
数组的遍历
数组的遍历:将数组从头到尾全部筛选一遍;

通常结合for循环使用,有多少元素就循环多少次;

快速遍历for—in
字典简介
对于”name:小三”来讲,key就是”name”,key对应的value是”小三”;

字典用于保存具有映射关系(key-value对)数据的集合;

一个key-value对认为是一个条目(Entry),字典是存储key-value对的容器
字典特点
与数组不同,字典靠key存取元素;

key不能重复,value必须是对象;

键值对在字典中是无序存储的;

字典分:不可变字典(NSDictionary)和可变字典(NSMutableDictionary)
不可变字典(NSDictionary)
不可变字典一旦创建,键值对就不可更改,不可添加,不可删除.

不可变字典仅能被读取key或者value

常用方法:

创建字典对象

获取所有key值,获取所有value值

通过key值查询value
不可变字典(NSDictionary)的创建
实例方法:

initWithObjectsAndKeys:

便利构造器:

+ dictionaryWithObjectsAndKeys:
获取所有的key和value,通过key查询value
获取所有key:

allKeys

获取所有value:

allValue

通过key查询value:

- objectForKey
可变字典(NSMutableDictionary)
NSDictionary的子类

可以对可变字典的键值对进行增,删,改

常用方法:

创建可变字典对象

添加键值对

修改key对应的value

删除键值对
可变字典(NSMutableDictionary)的创建
实例方法:

- initWithObjectsAndKeys:

initWithCapacity:

便利构造器:

+ dictionaryWithObjectAndKeys:
添加,修改,删除键值对
添加,修改键值对:

setValue:ForKey:

setObject:ForKey:

删除键值对:

-removeObjectForKey:
字典的遍历
遍历allKeys

遍历allValues

遍历所有的键值对
集合
数学中有集合的的概念

比如:整数集,自然数集.

再比如:集合{1,2,3,4},集合{2,3,5,6}

iOS中也有集合类与数学中的集合对应
集合的特点
与数学中的集合一样,集合中的元素唯一

存储的元素是无序的

存储元素必须是对象类型

iOS中用Set表示集合,分NSSet和NSMutableSet
不可变集合(NSSet)
常用方法:

创建集合对象

获取元素个数

获取集合中的某个元素

判断集合中是否包含某个对象
不可变集合(NSSet)的创建
实例化方法: 

initWithObjects:

便利构造器:

+ setWithObjects:
获取不可变集合(NSSet)的元素个数及某个元素
获取元素个数:

count

获取某个元素:

- anyObject
判断集合是否包含某个元素
- containsObject:
可变集合(NSMutableSet)
常用方法:

创建集合对象

添加元素

删除元素
可变集合(NSMutableSet)的创建
实例化方法:

initWithObjects:

便利构造器:

- setWithObjects:
可变集合(NSMutableSet)元素的添加,删除
添加元素:

addObject:

删除元素:

- removeObject:
计数集合特点
NSCountedSet是NSMutableSet的子类

能记录元素的重复次数

在set的基础上添加了计数功能

- countForObject:
第六节 类与对象

知识点
注意事项
数组的遍历
NSArray *array = @[@“西游记”,@“三国演义”,@“红楼梦”,@“水浒传”];

方法一:for循环

for(int i = 0;i < array.count ;i ++){NSLog(@“%@”,array[i]);}

方法二:枚举器

NSEnumerator *enumerator = [array objectEnumerator];

NSString *object = nil;

while(object = [enumerator nextObject]){NSLog(@“%@”,object);}

方法三:快速枚举(for in)

for(NSString *object  in  array){NSLog(@“%@”,object);}
字典的遍历
NSDictionary *dictionary = @{@“name”:@“张三”,@“sex”:@“男”,@“age”:@“20”}

方法一:for循环

NSArray *array01 = [dictionary allKeys];

for(int i = 0;i < array.count;i++){NSLog(@“%@—%@”,array[i],dictionary[array[i]]);}

方法二:枚举器

NSEnumerator *keyEnumerator = [dictionary keyEnumerator];

NSString *key = nil;

while(key = [keyEnumerator nextObject]){NSLog(@“%@—%@”,key,dictionary[key]);}

方法三:快速枚举(for in)

for(NSString *key  in  dictionary){NSLog(@“%@—%@”,key,dictionary[key]);}
集合的遍历
NSSet *set = [NSSet setWithObjects:@“zhao”,@“qian”,@“sun”,@“li”,nil];

方法一:for 循环

NSArray *array = [set allObjects];

for(int i = 0; i< array.count;i++){NSLog(@“%@”,array[i]);}

方法二:使用枚举器

NSEnumerator *enumerator =[set objectEnumerator];

NSString *object = nil;

while(object = [enumerator nextObject]){NSLog(@“%@”,object);}

方法三:快速遍历(for in)

for (NSString *object  in  set){NSLog(@“%@”,object);
for in
1.是 oc 的快速枚举语法,内部封装了枚举器。

2.数组 for in枚举的是数组元素

3.字典 for in枚举的是字典中的 key,因为 key 是唯一的

4.集合 for in 枚举的是集合中的元素;

5.如果用 for in 来枚举一个可变容器,不能在枚举期间对容器做任何修改,即:不能添加,删除等。如果需要在枚举期间做修改,请使用普通for 循环,而不要用 for in
不可变数组排序方法
排序方法:NSArray *array02 = [array01 sortedArrayUsingSelector:@selector(compareByNameAscending:)];

构建排序描述器:NSSortDescriptor *descriptor = [NSSortDescriptor sortDescriptorWithKey:@“name”ascending:YES];

     NSArray * array02 =[array01 sortedArrayUsingDescriptor:@[descriptor,….]]
可变数组排序方法
排序方法:NSArray *array02 = [array01 sortUsingSelector:@selector(compareByNameAscending:)];

构建排序描述器:NSSortDescriptor *descriptor = [NSSortDescriptor sortDescriptorWithKey:@“name”ascending:YES];

      NSArray * array02 =[array01 sortUsingDescriptor:@[descriptor,….]]
SEL
是你数组元素  元素与元素之间 的比较方法,如果数组是 person,就写 person 与 person 的比较方法。如果数组是 string,就写 string 与 string 的比较方法,如果数组是 teacher,就写 teacher 与 teacher 之间的比较方法。总之,数组元素是谁,就让第 j 个元素与第 j+1个元素比,你让它按年龄比,就给它比较年龄的方法,让他按身高比,就给它比较身高的方法。
小结
1.官方推荐的排序方法:使用 NSSortDescriptor(描述器排序)进行排序。这种方式可以实现复杂排序,可以设置n个排序条件,下标0放第一排序条件,下标1放第二排序条件,以此类推。。。

2.不可变数组也可以排序,只不过自身不会发生变化,会创建一个新的数组,存放排好序的元素,并把这个数组返回。

3.可变数组可以对自身排序

4.可变数组排序方法没有返回值。方法名第一个单词,是个动词。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息