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);
02-NSArray、NSSet、NSDictionary 集合类