引用块内容
集合类
1.NSArray 和 NSMutableArray
2.NSSet 和 NSMutableSet
3.NSDictionary 和 NSMutableDictionary
1.NSArray 和 NSMutableArray
- NSArray:不可变数组
- NSMutableArray可变数组
NSArray:
NSArray数组的创建
NSArray *array1 = [NSArray arrayWithObject:@"chenfanfang"];
//nil是数组元素结束的标记
NSArray *array2 = [NSArray arrayWithObjects:@"chenfanfang", nil];
NSArray *array3 = @"chenfanfang"; //推荐用这种方法
NSArray *array4 = [[NSArray alloc]initWithObjects:@"chenfanfang",nil];
//根据编译器特性,常用以下的这个方法创建数组
NSArray *array5 = @[@"chenfanfang1",@"chenfanfang2"];
查看array元素的个数
int length1 = [array1 count];
int length2 = array1.count;
根据下标获取数组的某元素
[array1 objectAtIndex:0];
array1[0];//这中方法简便
数组的遍历
方法1:普通for循环遍历
for (int i = 0; i < array1.count; i++) {
NSLog(@"%@",array1[i]);
}
方法2:快速遍历
//快速遍历
for(id obj in array1){
NSLog(@"%@",obj);
//找出obj元素在数组中的位置
NSUInteger i = [array1 indexOfObject:obj];
NSLog(@"%ld",i);
}
方法3:用block来遍历数组
NSArray *array1 = @[@"chenfanfang1",@"chenfanfang2"];
[array1 enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
NSLog(@"%d",idx);
NSLog(@"%@",obj);
if(idx == 0){
//停止遍历
*stop = YES;
}
}];
每遍历到一个元素,就会调用一次block,并且当前元素和索引位置当作参数传递给block
NSMutableArray:
NSMutableArray对象的创建
NSMutableArray *muArray1 = [NSMutableArray array];//空数组
NSMutableArray *muArray2 = [[NSMutableArray alloc]init];//空数组
NSMutableArray *muArray3 = [NSMutableArray arrayWithObjects:@"chenfanfang1",@"chenfanfang2", nil];
添加元素
[muArray1 addObject:<#(id)#>];
删除元素
//删除数组中所有元素
[muArray1 removeAllObjects];
//删除指定对象
[muArray1 removeObject:@"chenfanfang"];
//根据下标删除元素
[muArray1 removeObjectAtIndex:0];
注意事项
@[ ]的返回值是NSArray类型,只用于创建不可变数组,不能用雨NSMutableArray
//正确做法
NSArray *array1 = @[@"chenfanfang1",@"chenfanfang2"];
//错误做法
NSMutableArray *[array2 = @[@"chenfanfang1",@"chenfanfang2"];
NSSet和NSMutableSet
NSSet:无顺序的数组,其用法和NSArray相似
NSMutableSet的用法也和NSMutableArray相似
//NSSet数组的创建
NSSet *set1 = [NSSet set];//空数组
NSSet *set2 = [NSSet setWithObjects:@"chenfanfang1",@"chenfanfang2", nil];
//因为NSSet是无序的,因此不存在下标这回事
NSString *str = [set2 anyObject];//anyObject:任意的对象
NSSet和NSArray的对比
共同点:
- 都是集合,都能存放多个oc对象
- 只能存放oc对象,不能存放非oc对象类型(基本数据类型:int,char,float等、结构体,枚举)
- 本身是都不可变的,都有一个可变的子类
不同点:
- NSArray有顺序,NSSet没有顺序
字典:NSDictionary和NSMutableDictionary
字典的概念:
字典: key —–> value 即: 索引 —-> 文字内容
字典里存放的东西都是键值对
NSDictionary:不可变字典
字典的创建:
NSDictionary *dict = [NSDictionary dictionaryWithObject:@"chenfanfang" forKey:@"name"];
取出NSDictionary 里的元素
id obj = [dict objectForKey:@"name"];
NSLog(@"%@",obj);
输出结果:
2015-03-14 13:47:30.904 集合类[2653:27158] chenfanfang
用NSDictionary创建多元素的数组
NSArray *keys = @[@"name",@"address"];
NSArray *objects = @[@"chenfanfang",@"福建"];
NSDictionary *dict = [NSDictionary dictionaryWithObjects:objects forKeys:keys];
//取出字典中的元素,并且输出
id obj1 = [dict objectForKey:@"name"];
NSLog(@"name:%@",obj1);
id obj2 = [dict objectForKey:@"address"];
NSLog(@"address:%@",obj2);
//这种做法,类是于类
输出结果:
2015-03-14 13:55:55.151 集合类[2938:30517] name:chenfanfang
2015-03-14 13:55:55.152 集合类[2938:30517] address:福建
NSDictionary另一种创建方式
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
@"chenfanfang",@"name",
@"福建",@"address",
@"23",@"age", nil];
//取出元素并且输出
NSLog(@"name:%@",[dict objectForKey:@"name"]);
NSLog(@"address:%@",[dict objectForKey:@"address"]);
NSLog(@"age:%@",[dict objectForKey:@"age"]);
输出结果;
2015-03-14 14:03:35.031 集合类[3178:33403] name:chenfanfang
2015-03-14 14:03:35.032 集合类[3178:33403] address:福建
2015-03-14 14:03:35.033 集合类[3178:33403] age:23
根据xcode特性,简洁地创建NSDictionary对象
NSDictionary *dict = @{
@"name":@"chenfanfang",
@"address":@"福建",
@"age":@"23"
};
//取出元素并且输出
NSLog(@"name:%@",[dict objectForKey:@"name"]);
NSLog(@"address:%@",[dict objectForKey:@"address"]);
NSLog(@"age:%@",[dict objectForKey:@"age"]);
输出结果:
2015-03-14 14:07:17.659 集合类[3299:35014] name:chenfanfang
2015-03-14 14:07:17.660 集合类[3299:35014] address:福建
2015-03-14 14:07:17.660 集合类[3299:35014] age:23
返回键值对数:[dict count] 对应的点语法为:dict.count
NSDictionary *dict = @{
@"name":@"chenfanfang",
@"address":@"福建",
@"age":@"23"
};
//取出元素并且输出
int count1 = [dict count];
//以上对应的点语法为 dict.count
int count2 = dict.count;
NSLog(@"count1 = %d",count1);
NSLog(@"count2 = %d",count2);
输出结果:
2015-03-14 14:10:58.011 集合类[3416:36446] count1 = 3
2015-03-14 14:10:58.012 集合类[3416:36446] count2 = 3
NSMutableDictionary:可变字典
可变字典的创建、添加键值对、删除键值对
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
//添加键值对
NSLog(@"----------添加键值对-------------");
[dict setObject:@"chenfanfang" forKey:@"name"];
[dict setObject:@"福建" forKey:@"address"];
NSLog(@"键值对的个数是:%d",dict.count);
NSLog(@"address:%@",[dict objectForKey:@"address"]);
NSLog(@"----------覆盖键值对-------------");
//若在添加键值对的时候,若原本存在那个键,则会覆盖掉那个键值对
[dict setObject:@"三明" forKey:@"address"];
NSLog(@"键值对的个数是:%d",dict.count);
NSLog(@"address:%@",[dict objectForKey:@"address"]);
NSLog(@"----------删除键值对-------------");
[dict removeObjectForKey:@"address"];
NSLog(@"键值对的个数是:%d",dict.count);
输出结果:
2015-03-14 14:29:29.262 集合类[4017:42978] ———-添加键值对————-
2015-03-14 14:29:29.264 集合类[4017:42978] 键值对的个数是:2
2015-03-14 14:29:29.264 集合类[4017:42978] address:福建
2015-03-14 14:29:29.264 集合类[4017:42978] ———-覆盖键值对————-
2015-03-14 14:29:29.264 集合类[4017:42978] 键值对的个数是:2
2015-03-14 14:29:29.264 集合类[4017:42978] address:三明
2015-03-14 14:29:29.264 集合类[4017:42978] ———-删除键值对————-
2015-03-14 14:29:29.265 集合类[4017:42978] 键值对的个数是:1
字典的注意事项
- @{@”name “:@”chenfanfang”}字典的创建方式返回的是不可变的字典:NSDictionary,不能用于可变字典:NSMutableDictionary。所以以下的写法是错误的:NSMutableDictionary *dict = @{@”name”:@”chenfanfang”};
- 字典不允许有相同的Key,但允许有相同的value
- 字典是无序的
字典的遍历
- 方法1:用常规的for循环(不推荐)
NSArray *keys = [dict allKeys];
for (int i = 0; i < keys.count; i++) {
NSString *key = keys[i];
NSString *object = dict[key];
}
- 方法2:用block来遍历字典 (推荐)
[dict enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
NSLog(@"%@ -- %@",key,obj);
}];
输出结果:
2015-03-14 14:41:52.894 集合类[4412:48356] name – chenfanfang
2015-03-14 14:41:52.894 集合类[4412:48356] address – 三明
NSArray 和 NSDictionary的混合使用:NSArray中存放字典元素
NSArray *persons = @[
@{@"name":@"chenfanfang",@"address":@"福建"},
@{@"name":@"CFF",@"address":@"三明"}
];
//根据persons的下标取出字典对象
NSDictionary *CFF = persons[1];
NSLog(@"%@",CFF[@"name"]);
输出结果:
2015-03-14 14:52:07.473 集合类[4726:52124] CFF
集合类总结:
NSArray — NSMutableArray
- 有序
- @[obj1,obj2,obj3]只用于NSArray,不可用于NSMutableArray
- 快速访问元素: 数组名[i];
NSSet — NSMutableSet
- 无序
NSDictionary —NSMutableDictionary
- 无序
- @{key1:value1,key2:value2} 用于 NSDictionary而不能用于NSMutableDictionary
- 快速访问元素: 字典名[i]