黑马程序员---OC Foundation框架--集合类
2015-04-14 15:50
381 查看
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流!
-------
集合类:
1> C语言数组 缺点是只能放一类型的对象
如果想创建一个Person数组,
Person *p =[ [ Person alloc ] init ] ;
Person*person[5] = { p, [ [ Person alloc ] init ] };
但这样只能用来保存一种OC对象。
2> NSArray
不可变数组 ,当时创建是有多少个元素,以后永远都是多少个元素
NSMutableArray :(NSArray的子类)可变数组
创建NSArray:
NSArray *array =[ NSArray array]; //创建是没有设置元素,这个数组永远是空数组
NSArray *array2= [ NSArray arrayWithObject: @"jackl",nil]; //如果一个最后一个结束nil 就不用写了
NSArray *array3= [ NSArray arrayWithObject: @"jack", @"Rose", nil];
// nil 是数组元素的结束的标记,必须有
NSArray *array3= [ NSArray arrayWithObject: @"jack", @"Rose", nil,nil]; //错误写法 OC数组不能存放nil 值
3>计算数组中的对象个数的二种方法
[ array3 count];
array3.count;
打印具体位置的数组对象的二种方法
NSLog(@"%@", [ array3 objectAtIndex:1]);
Array3[ 1 ];
快速创建@;
NSArray *array5= @[@"jack" ,@"ROSe", @"adfa"];
4>NSArray的遍历:4种代码实现
// a.普通的for循环
for(int i=0;i<array5.count;i++)
{ NSLog(@"%@", array[i]); }
// b.快速for循环
for(id obj in array5)
{ //id obj 代表数组中的每个元素
//i代表元素在数组中的位置
NSUinteger i = [ array5 indexOfObject: obj];
NSLog(@"%d—%@",i,obj);
}
// c.OC 中的方法enumerateObjectsUsingBlock
每遍历到一个元素,就会调用一次block。并且当前元素和索引位置当作参数传给block
[array5 enumerateObjectsUsingBlock:
^( id obj,NSUInteger idx,BOOL *stop)
NSlLog(@"%ld--%@",idx, obj);
If ( idx ==1) *stop = YES;//用来标记是否停止遍历
]
反序遍历
[array5enumerateObjectsWithOptions:NSEnumerationReserver usingBlock:
^(idobj,NSUInteger idx,BOOL *stop)
{
NSlLog(@"%ld %@", idx, obj);
}];
NSMutableArray *array = [NSMutableArrayarray];
NSMutableArray *array2 = [NSMutableArrayarrayWithObject:@"rose",nil ];
添加元素:
[ array addObject: [ [ Person alloc] init] ;
[ array addObject:@"Jack" ];
//删除全部对象
[ array removeAllObjects];
//删除指定对象
[ array removeObect:@"jack"] ;
[array removeObjectAtIndex:2];
创建NSSet:
NSSet *s = [NSSet set];
NSSet *s2 = [NSSetsetWithObjects:@"jack",@"rose",@"jack2",@"jack3",nil];
// 随机拿出一个元素
NSString *str = [s2 anyObject];
NSLog(@"%ld", s2.count);
NSSet和NSArray的对比
1> 共同点
* 都是集合,都能存放多个OC对象
* 只能存放OC对象,不能存放非OC对象类型(基本数据类型:int、char、float等,结构体,枚举)
* 本身都不可变,都有一个可变的子类
2> 不同点
l NSArray有顺序,NSSet没有顺序
2.NSDictionary里面存储的是键值对,key----->value;
3.常用方法:
创建字典:
NSDictionary *dict = [NSDictionarydictionaryWithObject:@"jack" forKey:@"name"];
id obj = dict[@"name"];
NSLog(@"%@", obj);
和数组创建相应字典:
NSArray *keys = @[@"name",@"address"];
NSArray *objects = @[@"jack",@"北京"];
NSDictionary *dict = [NSDictionarydictionaryWithObjects:objects forKeys:keys];
NSDictionary *dict = [NSDictionarydictionaryWithObjectsAndKeys:
@"jack",@"name",
@"北京", @"address",
@"32423434",@"qq", nil];
快速创建字典:
NSDictionary *dict = @{@"name" :@"jack", @"address" : @"北京"};
这两句效果相同
id obj = [dictobjectForKey:@"name"];
id obj = dict[@"name"];
返回的是键值对的个数
NSLog(@"%ld", dict.count);
4.NSMutableSet可变字典
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
添加键值对
[dict setObject:@"jack" forKey:@"name"];
[dictsetObject:@"北京"forKey:@"address"];
如果对同一个Key重复定义,相应的值是最后一个添加的值,相当与覆盖重写,且不增加对键数(最后name的值是rose)
[dictsetObject:@"rose" forKey:@"name"];
移除键值对
[dict removeObjectForKey:@”name”];
遍历字典
NSLog(@"%@",dict);
NSDictionary中的快速创建方法不能用在NSMutableSet中
5.字典遍历:
[dict enumerateKeysAndObjectsUsingBlock:
^(id key, id obj, BOOL *stop) {
NSLog(@"%@ - %@", key, obj);
// *stop = YES;
}];
以下代码是不为之常见的:知道即可
1.
NSArray *Person = @[
@{@"name":@"jack",@"qq":@"34345"},
@{@"name":@"Tack",@"qq":@"34334545"},
@{@"name":@"Cack",@"qq":@"34353245"},
@{@"name":@"Lck",@"qq":@"343455562"}
];
NSDictionary *dict =Person[ 2];-------------------------------->@{@"name":@"Tack",@"qq":@"34334545"}
NSLog(@"%@",dict);-------------------------------------------->name:Tack qq:34334545
NSLog(@"%@",Person[2][@"qq"])--------------------------------->34334545
2.
NSArray *Person = @[
@{@"name":@"jack",@"qq":@"34345",@"book":@[@"平凡的世界",@"追风的人"]},
@{@"name":@"Tack",@"qq":@"34334545"}
];
NSLog(@"%@",Person[0][@"book][1]);--------------------->追风的人
-------
集合类:
一、NSArray
1.NSArray \ NSMutableArray
NSArray:面向对象类型,操作OC数组,不能存放基本数据类型/*1> C语言数组 缺点是只能放一类型的对象
如果想创建一个Person数组,
Person *p =[ [ Person alloc ] init ] ;
Person*person[5] = { p, [ [ Person alloc ] init ] };
但这样只能用来保存一种OC对象。
2> NSArray
不可变数组 ,当时创建是有多少个元素,以后永远都是多少个元素
NSMutableArray :(NSArray的子类)可变数组
创建NSArray:
NSArray *array =[ NSArray array]; //创建是没有设置元素,这个数组永远是空数组
NSArray *array2= [ NSArray arrayWithObject: @"jackl",nil]; //如果一个最后一个结束nil 就不用写了
NSArray *array3= [ NSArray arrayWithObject: @"jack", @"Rose", nil];
// nil 是数组元素的结束的标记,必须有
NSArray *array3= [ NSArray arrayWithObject: @"jack", @"Rose", nil,nil]; //错误写法 OC数组不能存放nil 值
3>计算数组中的对象个数的二种方法
[ array3 count];
array3.count;
打印具体位置的数组对象的二种方法
NSLog(@"%@", [ array3 objectAtIndex:1]);
Array3[ 1 ];
快速创建@;
NSArray *array5= @[@"jack" ,@"ROSe", @"adfa"];
4>NSArray的遍历:4种代码实现
// a.普通的for循环
for(int i=0;i<array5.count;i++)
{ NSLog(@"%@", array[i]); }
// b.快速for循环
for(id obj in array5)
{ //id obj 代表数组中的每个元素
//i代表元素在数组中的位置
NSUinteger i = [ array5 indexOfObject: obj];
NSLog(@"%d—%@",i,obj);
}
// c.OC 中的方法enumerateObjectsUsingBlock
每遍历到一个元素,就会调用一次block。并且当前元素和索引位置当作参数传给block
[array5 enumerateObjectsUsingBlock:
^( id obj,NSUInteger idx,BOOL *stop)
NSlLog(@"%ld--%@",idx, obj);
If ( idx ==1) *stop = YES;//用来标记是否停止遍历
]
反序遍历
[array5enumerateObjectsWithOptions:NSEnumerationReserver usingBlock:
^(idobj,NSUInteger idx,BOOL *stop)
{
NSlLog(@"%ld %@", idx, obj);
}];
2.NSMutableArray:
创建可变数组:NSMutableArray *array = [NSMutableArrayarray];
NSMutableArray *array2 = [NSMutableArrayarrayWithObject:@"rose",nil ];
添加元素:
[ array addObject: [ [ Person alloc] init] ;
[ array addObject:@"Jack" ];
//删除全部对象
[ array removeAllObjects];
//删除指定对象
[ array removeObect:@"jack"] ;
[array removeObjectAtIndex:2];
二、NSSet
没有顺序,有子类NSMutableSet创建NSSet:
NSSet *s = [NSSet set];
NSSet *s2 = [NSSetsetWithObjects:@"jack",@"rose",@"jack2",@"jack3",nil];
// 随机拿出一个元素
NSString *str = [s2 anyObject];
NSLog(@"%ld", s2.count);
NSSet和NSArray的对比
1> 共同点
* 都是集合,都能存放多个OC对象
* 只能存放OC对象,不能存放非OC对象类型(基本数据类型:int、char、float等,结构体,枚举)
* 本身都不可变,都有一个可变的子类
2> 不同点
l NSArray有顺序,NSSet没有顺序
三、NSDictionary
1.NSDictionary(字典)通常在给定一个关键字(通常是一个NSString字符串)下存储一个数值(可以是任何类型的对象)。然后你可以使用这个关键字查找相应的数值;2.NSDictionary里面存储的是键值对,key----->value;
3.常用方法:
创建字典:
NSDictionary *dict = [NSDictionarydictionaryWithObject:@"jack" forKey:@"name"];
id obj = dict[@"name"];
NSLog(@"%@", obj);
和数组创建相应字典:
NSArray *keys = @[@"name",@"address"];
NSArray *objects = @[@"jack",@"北京"];
NSDictionary *dict = [NSDictionarydictionaryWithObjects:objects forKeys:keys];
NSDictionary *dict = [NSDictionarydictionaryWithObjectsAndKeys:
@"jack",@"name",
@"北京", @"address",
@"32423434",@"qq", nil];
快速创建字典:
NSDictionary *dict = @{@"name" :@"jack", @"address" : @"北京"};
这两句效果相同
id obj = [dictobjectForKey:@"name"];
id obj = dict[@"name"];
返回的是键值对的个数
NSLog(@"%ld", dict.count);
4.NSMutableSet可变字典
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
添加键值对
[dict setObject:@"jack" forKey:@"name"];
[dictsetObject:@"北京"forKey:@"address"];
如果对同一个Key重复定义,相应的值是最后一个添加的值,相当与覆盖重写,且不增加对键数(最后name的值是rose)
[dictsetObject:@"rose" forKey:@"name"];
移除键值对
[dict removeObjectForKey:@”name”];
遍历字典
NSLog(@"%@",dict);
NSDictionary中的快速创建方法不能用在NSMutableSet中
5.字典遍历:
[dict enumerateKeysAndObjectsUsingBlock:
^(id key, id obj, BOOL *stop) {
NSLog(@"%@ - %@", key, obj);
// *stop = YES;
}];
以下代码是不为之常见的:知道即可
1.
NSArray *Person = @[
@{@"name":@"jack",@"qq":@"34345"},
@{@"name":@"Tack",@"qq":@"34334545"},
@{@"name":@"Cack",@"qq":@"34353245"},
@{@"name":@"Lck",@"qq":@"343455562"}
];
NSDictionary *dict =Person[ 2];-------------------------------->@{@"name":@"Tack",@"qq":@"34334545"}
NSLog(@"%@",dict);-------------------------------------------->name:Tack qq:34334545
NSLog(@"%@",Person[2][@"qq"])--------------------------------->34334545
2.
NSArray *Person = @[
@{@"name":@"jack",@"qq":@"34345",@"book":@[@"平凡的世界",@"追风的人"]},
@{@"name":@"Tack",@"qq":@"34334545"}
];
NSLog(@"%@",Person[0][@"book][1]);--------------------->追风的人
相关文章推荐
- 黑马程序员——Java中集合框架总结
- 黑马程序员——Java基础知识(集合框架(上))
- 黑马程序员-_笔记十五_集合框架
- 黑马程序员_Java基础_集合框架工具类
- 黑马程序员_Java学习日记10_集合框架2
- [OC Foundation框架 - 22] 集合的内存管理
- 黑马程序员----集合框架
- 黑马程序员---回顾之集合框架总结
- 黑马程序员-----Java基础-----集合框架(三)
- 黑马程序员--Map集合、集合框架工具类
- 黑马程序员:JAVA集合框架知识点二
- 黑马程序员--集合框架
- 黑马程序员 java学习笔记——集合框架2
- 黑马程序员——集合框架的使用及其注意事项
- 黑马程序员-Java集合框架整体观
- 黑马程序员——Java要点笔记——集合框架(List)
- 黑马程序员——集合框架4:Map集合
- 黑马程序员_JAVA笔记14——集合框架(List、HashSet、TreeSet)
- 黑马程序员---一DAY16总结--java中你必须掌握的集合框架技术
- 黑马程序员_【总结】_集合框架知识梳理1