黑马程序员_Foundation框架基础知识(二)集合类
来源:互联网 发布:互联网金融教学软件 编辑:程序博客网 时间:2024/05/29 04:42
------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“];
- 黑马程序员_Foundation框架基础知识(二)集合类
- 黑马程序员_Foundation框架基础知识(三)-常用类
- 黑马程序员_Foundation框架03_集合类
- 黑马程序员_Foundation框架
- 黑马程序员_Foundation框架
- 黑马程序员_Foundation框架
- 黑马程序员_Foundation框架基础知识(一)常用结构体
- 黑马程序员_Foundation框架小结
- 黑马程序员_object c学习日记⑥_Foundation框架:结构体、集合类、NSString、日期类
- 黑马程序员_Foundation框架02_NSString
- 黑马程序员_Foundation框架的学习
- 黑马程序员 集合框架二
- 黑马程序员_Foundation框架01_结构体
- 黑马程序员_Foundation框架04_NSNumber、NSValue、NSDate
- 黑马程序员 集合基础知识
- 黑马程序员_集合框架(二)
- 黑马程序员 集合框架(二)
- 黑马程序员-----集合框架笔记二
- jstl
- Android权限大全
- java基于MVC的简单博客系统
- 码农之路:我早该做好的5件事
- LeetCode OJ 之 Remove Duplicates from Sorted List II (删除有序链表中重复的数 - 二)
- 黑马程序员_Foundation框架基础知识(二)集合类
- PHP是一门高效的网络编程语言
- IOS用CGContextRef画各种图形
- 系统调用手册
- linux有关查看时间修改时间
- 学习笔记2
- iOS: 对图片进行不规则剪裁
- 第十九章立体视觉
- 关于android中资源文件中空格需要用 代替...需要用…代替问题研究