您的位置:首页 > 其它

OC学习之--字典&集合

2015-10-30 00:00 417 查看
摘要: NSDictionary , NSMutableDictionary, NSSet, NSMutableSet, 快速枚举

一.字典

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

特点:与数组不同, 字典靠key存取元素

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

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

字典分:不可变字典(NSDictionary)和可变字典(NSMutableDictionary)

1.不可变字典(NSDictionary)

字典一旦创建,键值对就不可以更改, 不可添加,不可删除.

仅能读取key或者value.

1). 创建&初始化

//使用遍历构造器创建和初始化
NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:@"王五", @"name", @"男", @"sex", @"瑜伽", @"hobby", nil];
//使用init创建和初始化
NSDictionary *dic1 = [NSDictionary alloc] initWithObjectsAndKeys:@"王五", @"name", @"男", @"sex", @"瑜伽", @"hobby", nil];

2). 通过key获取value

//输出sex所对应的value
NSLog(@"%@", [dic objectForKey:@"sex"]);

3). 获取所有key, 获取所有value

for (NSInteger i = 0; i < dic.allKeys.count; i ++) {
//先通过下标获取key
NSString *key = [dic.allKeys objectAtIndex:i];
//再通过key获取value
NSLog(@"%@", [dic objectForKey:key]);
}

2. 可变字典(NSMutableDictionary)

NSDictionary的子类,可以使用父类方法

可以对管理的键值对进行增删改.

1). 创建&初始化

//使用遍历构造器创建和初始化
NSMutableDictionary *mdic = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"王五", @"name", @"男", @"sex", @"瑜伽", @"hobby", nil];
//使用init创建和初始化
NSMutableDictionary *mdic1 = [NSMutableDictionary alloc] initWithObjectsAndKeys:@"王五", @"name", @"男", @"sex", @"瑜伽", @"hobby", nil];
//创建空得可变字典
NSMutableDictionary *mdic2 = [NSMutableDictionary dictionary];

2).添加&修改

//找到key值时修改,找不到的时候添加
[mdic setObject:@"王宁" forKey:@"name"];
[mdic setObject:@"男" forKey:@"sex"];
[mdic setObject:@"瑜伽" forKey:@"hobby"];

NSLog(@"%@", [mdic objectForKey:@"name"]);

3). 删除 removeObjectForKey

//删除了sex的键值对
[mdic removeObjectForKey:@"sex"];

4).遍历字典

for (NSInteger i = 0; i < mdic.allKeys.count; i ++)
{
NSString *key = [mdic.allKeys objectAtIndex:i];
NSLog(@"%@", [mdic objectForKey:key]);
}
//其中, mdic.allKeys 是获取所有的键值key

二. 集合

与数学中的集合一样,集合中的元素唯一.

存储的元素是无序的

存储元素必须是对象类型

iOS中用Set表示集合,分NSSet和NSMutableSet

1. 不可变集合

1). 创建&初始化

注意:集合注重的操作方式是判断是否包含,判断交集并集等

集合中的元素具有唯一性,若重复保留一个.

NSSet *set = [NSSet setWithObjects: @"1", @"2", @"3", @"4", nil];
//个数
NSLog(@"%ld", set.count);
//获取任意一个元素值
NSLog(@"%@", [set anyObject]);
//判断是否包含某个元素
NSLog(@"%@", [set containsObject:@"1"]);

2. 可变集合

1).创建&初始化

//可变集合
NSMutableSet *mset = [NSMutableSet setWithObjects:@"1", @"2", @"3", @"4", nil];
NSMutableSet *mset1 = [NSMutableSet setWithObjects: @"2", @"3", @"4",@"5", nil];

2).基本操作

//合并
[mset unionSet:mset1];
//交集
[mset intersectSet:mset1];
//添加
[mset addObject:@"9"];
//删除
[mset removeObject:@"4"];

3).个数问题

//可以判断重复元素个数
NSCountedSet *cset = [NSCountedSet setWithObjects:@"1", @"2", @"2", @"4", nil];
//元素个数
NSLog(@"%ld", cset.count);
//重复元素个数
NSLog(@"%ld", [cset countForObject:@"2"]);

三.快速枚举

1.定义

for (<#type *object#> in <#collection#>) {}
//1、object是遍历得到的元素对象。
2、collection是集合类型的对象:数组、字典、集合。

2.特点

数组枚举得到数组中的元素对象。

字典枚举得到字典中的key值。

集合枚举得到集合中的元素对象。

3. 快速枚举数组

NSArray *arr = [NSArray arrayWithObjects:@"1", @"2", @"2", @"4", nil];
//遍历打印
for (NSInteger i = 0; i < arr.count; i ++) {
NSLog(@"%@", [arr objectAtIndex:i]);
}
//快速枚举
for (NSString *str in arr) {
NSLog(@"%@", str);
}

4.快速枚举字典

NSDictionary *dic111 = [NSDictionary dictionaryWithObjectsAndKeys:@"王宁", @"name", @"男", @"sex", @"瑜伽", @"hobby", nil];
//collection是集合类型的对象:数组,字典,集合.

//遍历字典得到的是key
for (NSString *key in dic111) {
NSLog(@"%@", [dic111 objectForKey:key]);
}

5.快速枚举集合

//注意!!!快速枚举 - 不要在forin中改变被遍历的collection
NSSet *set1 = [NSSet setWithObjects: @"1", @"2", @"3", @"4", nil];
for (NSString *str in set1) {
NSLog(@"%@", str);
}

四.数组快速排序

1.可变数组

//可变数组排序
NSMutableArray *arr1 = [NSMutableArray arrayWithObjects:@"a", @"d", @"c", @"b", nil];
//遍历
[arr1 sortUsingSelector:@selector(compare:)];
//输出
for (NSInteger i = 0; i < arr1.count; i ++) {
NSLog(@"%@", [arr1 objectAtIndex:i]);
}

2.不可变数组

NSArray *arr11 = [NSArray arrayWithObjects:@"1", @"4", @"2", @"3", nil];
NSArray *sortArr = [arr11 sortedArrayUsingSelector:@selector(compare:)];
//输出
for (NSInteger i = 0; i < sortArr.count; i ++) {
NSLog(@"%@", [sortArr objectAtIndex:i]);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息