首页 > 代码库 > 02-NSArray、NSSet、NSDictionary 集合类
02-NSArray、NSSet、NSDictionary 集合类
NSArray、NSSet、NSDictionary 集合类
可以用来装东西
OC数组只能存放OC对象、不能存放非OC对象类型,如int、struct\enu等
OC数组不能存放nil值
1.NSArray 不可变数组
1》. NSArray *array1 = [NSArray array]; // 由于是不可变数组,永远都是空数组
2》. NSArray *array2 = [NSArray arrayWithObject:@"whblap"];
3》. NSArray *array3 = [NSArray arrayWithObjects:@"whb",@"lap",nil]; //nil是数组元素 结束的标记
[array3 count]; // 计算数组元素个数
[array3 objectAtIndex:1]; // 可取到第二个元素 lap == array3[0];
4》. 快速创建数组对象 推荐使用,提高编码效率
NSArray *array4 = @[@"whb",@"lap"]; // @ 是OC特有的关键字,代表创建一个对象 此处为创建一个OC数组对象 并且@只能创建不可变数组NSArray
2.数组遍历
1》. 普通遍历:
NSArray *array = @[@"whb",@"lap"];
for(int i= 0;i<array.count;i++){
NSLog(@"%@",array[i]);
}
2》. 快速遍历:
NSArray *array = @[@"whb",@"lap"];
for (id obj in array) // obj 代表着数组中的每一个元素
{
NSUInteger i = [array indexOfObject:obj]; // 找出obj元素在数组中的位置
NSLog(@"%ld ---- %@",i, obj);
}
3》. block遍历:
[array enumerateObjectsUsingBlock: //每拿到一个元素的时候就会调用一次block
^(id obj, NSUInteger idx,BOOL *stop) // obj是对应里面的元素 idx是对应的元素下标(即索引) 并且当前元素和索引位置当做参数传给block
{
NSLog(@"%ld --- %@",idx,obj);
}];
3.NSMutableArray 可变数组
NSMutableArray *array = [NSMutableArray arrayWithObjects:@"whb",@"lap",nil];
//添加元素
[array addObject:@"hello"];
// 删除所有元素
[array removeAllObjects];
// 删除指定的对象
[array removeObject:@"hello"];
[array removeObjectAtIndex:1];
// 打印数组
NSLog(@"%@",array);
1.NSSet集合
NSSet和NSArray的对比
1> 共同点
* 都是集合,都能存放多个OC对象
* 只能存放OC对象,不能存放非OC对象类型(基本数据类型:int、char、float等,结构体,枚举)
* 本身都不可变,都有一个可变的子类
2> 不同点
* NSArray有顺序,NSSet没有顺序
2.NSMutableSet 可变集合
NSMutableSet *set = [NSMutableSet set]; // 空的集合对象
[set addObject:@"whb"]; // 添加某个元素个数
[set removeObject:@"whb"]; // 删除某个元素
NSString *str = [set anyObject]; // 随机取出某个元素
NSLog(@"打印随机取的元素 %@",str);
1. NSDictionary 不可变字典
字典特点:
key ----> value 索引 ----> 文字内容
里面存储的东西都是键值对
字典不允许有相同的key,但允许有相同的value(Object)
字典是无序的
// NSDictionary的创建
1》.NSDictionary *dict = [NSDictionary dictionaryWithObject:@"whb",forKey:@"name"];
// NSDictionary *dict = [NSDictionary dictionaryWithObjects:objects forKeys:keys];
2》.NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
@"whb", @"name",
@"福建", @"address",
@"841657484", @"qq", nil]; // 这种一般不写,可用Xcode编译器特性,下面一段代码代替
3》. NSDictionary *dict = @[@"name" : @"whb",@"address" : @"福建",@"qq" : @"841657484"]; // 推荐使用
// 利用key 查找对应的值
1》. id obj = [dict objectforKey:@"name"]; // 不推荐使用
2》. id obj = @[@"name"]; // 推荐使用 这行代码会自动转成上面那段代码
// 返回的是键值对的个数
NSLog(@"%ld", dict.count);
2.NSMutableDictionary 可变数组
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
//添加键值对
[dict setObject:@"value" forKey:@"Key"];
// 移除键值对
[dict removeObjectForKey:@"Key"];
3.字典的遍历
1》. 普通遍历
NSArray *keys = [dict allKeys];
for(int i = 0;i<dict.count;i++)
{
NSString *key = keys[i]; // 取到每一个key
NSString *object = dict[key]; //根据key 查找对应的object
NSLog(@"%@ = %@", key, object);
}
2》.block遍历:
集合小结:
和java对比:
NSArray ==== ArrayList
NSSet ==== HashSet
NSDictionary ==== HashMap
1.NSArray\NSMutableArray
* 有序
* 快速创建(不可变):@[obj1, obj2, obj3]
* 快速访问元素:数组名[i]
2.NSSet\NSMutableSet
* 无序
3.NSDictionary\NSMutableDictionary
* 无序
* 快速创建(不可变):@{key1 : value1, key2 : value2}
* 快速访问元素:字典名[key]
综合应用,LOOK下面代码:
NSArray *persons = @[
@{@"name" : @"jack", @"qq" : @"432423423", @"books": @[@"5分钟突破iOS编程", @"5分钟突破android编程"]},
@{@"name" : @"rose", @"qq" : @"767567"},
@{@"name" : @"jim", @"qq" : @"423423"},
@{@"name" : @"jake", @"qq" : @"123123213"}
];
// NSDictionary *jim = persons[2];
NSString *bookName = persons[0][@"books"][1];
NSLog(@"%@", bookName);
//NSArray *array = persons[0][@"books"];
//NSLog(@"%@", array);
// 先取出1位置对应的字典
// 再取出字典中qq这个key对应的数据
//NSLog(@"%@", persons[1][@"qq"]);
// NSLog(@"%@", jim);