------Java培训、Android培训、iOS培训、.Net培训、期待与您交流!
一.NSArray和NSMutableArray
1.NSArray
1>NSArray根据一定的顺序保存OC对象类型的数据(不能存放空值nil),不可以存放非OC对象类型的数据。一旦创建了一个NSArray对象,对象里面包含的元素个数是不可变的。
2>创建NSArray对象
1)创建NSArray对象有多种方式:
// 这个array永远是空数组,因为NSArray对象是不可变的。
NSArray *array1 = [NSArray array];
// 创建拥有一个元素的NSArray对象
NSArray *array2 = [NSArray arrayWithObject:@"jack"];
// 创建拥有多个元素的NSArray对象。但是最后一个参数必须是nil,是数组元素结束的标记。
NSArray *array3 = [NSArray arrayWithObjects:@"jack", @"Anna",nil];
// 快速创建一个NSArray对象。这种方式只能用来创建NSArray数组。这是一个编译器特性。
NSArray *array4 = @[@"jack", @"Anna"];
3>获取数组元素个数
NSArray *array3 = [NSArray arrayWithObjects:@"jack", @"Anna",nil];
// 获取array3的元素个数。
NSUInteger len = [array3 count];
//也可以使用点语法。@property(readonly) NSUInteger count。
//NSUInteger len = array3.count;
4>访问数组元素
NSArray *array3 = [NSArray arrayWithObjects:@"jack", @"Anna",nil];
// 访问数组元素,2种方式
NSLog(@"%@",[array3 objectAtIndex:1]);
// 快速访问数组元素。编译器特性,编译器会自动转成第一种方式
NSLog(@"%@",array3[0]);
5>遍历数组
1) 基本方式
Person *p = [[Person alloc] init];
//第一种方式
NSArray *array = @[p, @"jack"]; // @[]只能用来创建不可变数组
for (int i = 0; i<array.count; i++)
{
NSLog(@"%@",array[i]);
}
2)快速遍历数组
Array *array = @[@"JACK",@"Anna"];
// 循环体每执行一次都会按顺序从数组中取出对象赋值给obj
for (id obj in array)
{
NSLog(@"%@",obj);
}
3)使用block遍历数组
// 每获取到一个元素,就会调用一次block并且当前元素和其索引位置当做参数传给block
// *stop用来控制循环是否终止
[array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop)
{
NSLog(@"%ld - %@", idx, obj);
if (idx ==1)
{
*stop = YES;
}
}];
2.NSMutableArray
1>NSMutableArray是NSArray的子类,所以NSArray中的方法NSMutableArray都可以使用。与NSArray不同的是,NSMutableArray数组是可变的,也就是数组元素个数是可以改变的。
2>创建NSMutableArray对象的方法与NSArray相同,但是不可以使用快速创建对象的方式创建NSMutableArray对象。
// 错误写法
NSMutableArray *mutableArray = @[@"jack"];
3>添加元素
NSMutable *array = [NSMutableArray array];
[array addObject:[[Person alloc] init]];
[array addObject:@"jack"];
4>删除元素
NSMutableArray *array = [NSMutableArray arrayWithObjects:@"rose", @"jim", nil];
// 删除所有元素
//[array removeAllObjects];
// 删除指定的对象
// [array removeObject:@"jim"];
// 按索引位置删除元素
[array removeObjectAtIndex:0];
// 错误写法
// [array addObject:nil];
二.NSSet和NSMutableSet
1.NSSet
1>NSSet也是用来保存OC对象类型的数据(不能是空值nil),但是它是没有顺序的,它里面保存对象的位置是随机的。不可以存放非OC对象类型的数据。一旦创建了一个NSSet对象,对象里面包含的元素个数是不可变的。
2>创建NSSet对象
// s始终都会为空
NSSet *s = [NSSet set];
NSSet *s1 = [NSSet setWithObject:@"jack"];
NSSet *s2 = [NSSet setWithObjects:@"jack",@"rose", @"jack2",@"jack3",nil];
3>访问元素
NSSet *set = [NSSet setWithObject:@"jack"];
// 随机拿出一个元素,因为NSSet是无序的。
NSString *str = [set anyObject];
4>获取元素个数
NSSet *set = [NSSet setWithObjects:@"jack",@"lose"];
NSLog(@"%ld", set.count);
2.NSMutableSet
1>NSMutableSet是NSSet的子类,所以NSSet中的方法NSMutableSet都可以使用。与NSSet不同的是,NSMutableSet是可变的,也就是数组元素个数是可以改变的。
2>添加元素
NSMutableSet *s = [NSMutableSet set];
[s addObject:@"hack"];
3>删除元素
NSMutableSet *set = [NSMutableSet setWithObjects:@"jack",@"lose"];
//删除指定元素
[set removeObject:@"jack"];
三.NSDictionary和NSMutableDictionary
1.NSDictionary
1>NSDictionary也是用来保存对象的,保存的方式有些特别,它保存的是键值对而且是无序的,每一个对象对应一个key值。一旦创建了一个NSDictionary对象,对象里面包含的元素(键值对)个数是不可变的。
2>创建NSDictionary对象
1)注意: 字典不允许有相同的key,但允许有相同的value(Object)
//创建拥有多个元素的对象
NSDictionary *dict1 = [NSDictionary dictionaryWithObject:@"jack" forKey:@"name"];
//通过数组创建对象
NSArray *keys = @[@"name", @"address"];
NSArray *objects = @[@"jack", @"北京"];
NSDictionary *dict2 = [NSDictionary dictionaryWithObjects:objects forKeys:keys];
//可读性差
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
@"jack", @"name",
@"北京", @"address",
@"32423434", @"qq", nil];
// 快速创建对象方式,只用于NSDictionary对象
NSDictionary *dict = @{@"name" : @"jack", @"address" : @"北京"};
3>获取对象
NSDictionary *dict = @{@"name" : @"jack", @"address" : @"北京"};
// 获取key值对应的对象
id obj = [dict objectForKey:@"name"];
// 快速获取方式
id obj = dict[@"name"]
4>返回元素个数
NSDictionary *dict = @{@"name" : @"jack", @"address" : @"北京"};
// 返回的是键值对的个数
NSLog(@"%ld", dict.count);
5>遍历
1)
NSDictionary *dict = @{
@"address" : @"北京",
@"name" : @"jack",
@"name2" : @"jack",
@"name3" : @"jack",
@"qq" : @"7657567765"};
NSArray *keys = [dict allKeys];
for (int i = 0; i<dict.count; i++)
{
NSString *key = keys[i];
NSString *object = dict[key];
NSLog(@"%@ = %@", key, object);
}
2)通过block遍历
NSDictionary *dict = @{
@"address" : @"北京",
@"name" : @"jack",
@"name2" : @"jack",
@"name3" : @"jack",
@"qq" : @"7657567765"};
[dict enumerateKeysAndObjectsUsingBlock:
^(id key, id obj, BOOL *stop)
{
NSLog(@"%@ - %@", key, obj);
// *stop = YES;
}];
2.NSMutableDictionary
1>NSMutableDictionary是是NSDictionary的子类,所以NSDictionary中的方法NSMutableDictionary都可以使用。与NSDictionary不同的是,NSMutableDictionary是可变的,也就是数组元素个数是可以改变的。
2>添加元素
1)注意: 再次为同一个key设置值的时候,会覆盖掉以前的值。
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
[dict setObject:@"jack" forKey:@"name"];
[dict setObject:@"北京" forKey:@"address"];
[dict setObject:@"rose" forKey:@"name"];
3>删除元素
NSMutableDictionary *dic = [NSMutableDictionary dictionaryWithObjeck:@"jack" forKey:@"name"];
// 删除指定key值对应的对象
[dic removeObjectForKey:@”name“];