黑马程序员—Objective-C学习—Foundation—集合类和其他类
2014-11-04 23:16
162 查看
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
a、有序
b、快速创建(不可变):@[obj1,obj2]
c、快速访问元素:数组名[i]
2、NSSet\NSMutableSet
a、无序
3、NSDictionary\NSMutableDictionary
a、无序
b、快速创建(不可变):@{key1
: value1, key2 : value2}
c、快速访问元素:字典名[key]
4、NSArray和NSSet对比
a、共同点
(1)、都是集合,都能存放多个OC对象
(2)、只能存放OC对象,不能存放非OC对象(基本数据类型:int、char、float等,结构体,枚举)
(3)、本身都不可变,都有一个可变的子类
b、不同点
(1)、NSArray是有序的,NSSet是无序的
a、NSArray的创建
(1) 、 // 这个数组永远是空数组
NSArray *array = [NSArray
array];
(2)、 // 一个元素的数组
NSArray *array2 = [NSArray
arrayWithObject:@"jack"];
(3)、
// 多个元素的数组
NSArray *array3 = [NSArray
arrayWithObjects:@"jack",@"rose",nil];
(4)、 //快速创建一个NSArray对象
NSArray *array4 = @[@"jack",@"jim",
@"rose"];
b、获取数组元素个数,输出用%ld
//[array2 count]
NSLog(@"%ld", array2.count);
c、获取数组元素
(1)、 //获取数组某个位置对应的对象
NSLog(@"%@", [array3
objectAtIndex:1]);
(2)、 // 新特性访问方式
NSLog(@"%@",array3[0]);
d、数组的遍历
(1)、
for (int i =
0; i<array4.count; i++) {
NSLog(@"%@", array4[i]);
(2)、快速遍历
for (id obj
in array
4000
4)
{ // 找出obj元素再数组中的位置
NSUInteger i = [array4 indexOfObject:obj];
NSLog(@"%ld-%@",i, obj);
}
(3)利用block遍历方式
// [array4 enumerateObjectsUsingBlock:<#^(id obj, NSUInteger idx, BOOL *stop)block#>]
[array4enumerateObjectsUsingBlock:
// 每遍历到一个元素,就会调用一次block,并且把当前元素和索引位置当做参数传给block
// *stop作用是为了退出循环,赋值为YES停止
^(id obj,NSUInteger idx,
BOOL *stop) {
NSLog(@"%ld-%@",idx, obj);
if(idx == 1)
{
// 停止遍历
*stop =YES;// 只有传地址block内部才可利用指针修改外部的BOOL类型变量
}
}];//注意分号别忘了
//NSEnumerationReverse参数为倒序遍历
[array enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
NSLog(@"4倒序遍历array:%ld-->%@",idx,obj);
}];
第四种遍历:利用枚举
NSEnumerator *en = [array objectEnumerator];
id obj;
int j = 0 ;
while (obj = [en nextObject]) {
NSLog(@"5遍历array:%d-->%@",j,obj);
j++;
}
e、使用注意:
(1)、OC数组—只能存放OC对象
(2)、OC数组不能存放nil值
(3)、OC数组只能存放OC对象、不能存放非OC对象类型,比如int、struct、enum等
2、NSMutableArray:可变数组
a、创建
(1)、NSMutableArray *array = [NSMutableArrayarray];
(2)、NSMutableArray *array2 = [NSMutableArrayarrayWithObjects:@"rose",@"jack",
nil];
(3)、不可以用@[]快速创建NSMutableArray
// NSMutableArray *array3 = @[@"rose", @"jack"];
b、添加元素
[array
addObject:[[Person
alloc]init]];
[array
addObject:@"jim"];
// 错误写法
// [array addObject:nil];
c、删除元素
// 删除所有对象
[array
removeAllObjects];
// 删除指定对象
[array
removeObject:@"jim"];
// 删除对应位置对象
[arrayremoveObjectAtIndex:1];
a、创建方法:
(1)、创建一个空的set,不能添加元素
NSSet *s = [NSSetset];
(2)、NSSet *s1 = [NSSetsetWithObjects:@"jack",@"rose",@"jack1",@"rose1",@"jack2",nil];
b、随机拿一个元素
NSString *str = [s1anyObject];
2、NSMutableSet
a、创建方法
NSMutableSet *s = [NSMutableSetset];
b、添加元素
[saddObject:@"back"];
c、删除元素
[sremoveObject:@"back"];
a、key ---> value
索引 --->文字内容
里面存储的东西都是键值对
b、创建方式:
(1)、NSDictionary *dict = [NSDictionarydictionaryWithObject:@"jack"forKey:@"name"];
(2)、先定义key数组和对象数组
NSArray *keys =@[@"name",@"address"];
NSArray *objects =@[@"jack",@"北京"];
NSDictionary *dict2 = [NSDictionarydictionaryWithObjects:objects
forKeys:keys];
(3)、NSDictionary *dict3 = [NSDictionary dictionaryWithObjectsAndKeys:
@"jack",@"name",
@"北京",@"address",
@"3243434",@"qq"
,nil];
(4)、编译器特性
NSDictionary *dict4 =@{@"name":@"jack",@"address":@"北京"};//定义用这个
c、获取key对应的value方法
(1)、id obj = [dict objectForKey:@"name"];
(2)、id obj2 = dict2[@"name"];//[]
内放key
d、返回的是键值对的个数
NSLog(@"%ld",dict2.count);
2、NSMutableDictionary
a、创建方式
NSMutableDictionary *dict =[NSMutableDictionarydictionary];
b、添加键值对
[dictsetObject:@"jack"forKey:@"name"];
[dictsetObject:@"北京"forKey:@"address"];
//将以前的key为@"name"的覆盖
[dictsetObject:@"rose"forKey:@"name"];
c、移除键值对
[dictremoveObjectForKey:@"address"];
d、数组打印结果用()括住
字典打印用{}括住,内容为key = value,打印所有键值对
e、不可以用@{}定义一个不可变字典
NSMutableDictionary *dict =@{@"name":@"jack"};
3、字典的遍历
(1)、
NSArray *keys = [dictallKeys];
for (int i =0; i<dict.count;
i++) {
NSString *key = keys[i];
NSString *object = dict[key];
NSLog(@"%@ = %@",key, object);
}
(2)、[dictenumerateKeysAndObjectsUsingBlock:
^(id key,id obj,BOOL *stop) {
NSLog(@"%@ = %@", key, obj);
}];
4、字典不允许有相同的key,但允许有相同的value(Object),字典是无序的
a、创建number对象,将基本数据类型转为NSNumber对象
NSNumber *num = [NSNumbernumberWithInt:10];
b、将NSNumber对象变为基本数据类型
int a = [num
intValue];
c、字符串和基本数据类型的转换
int a =20;
NSString *str = [NSStringstringWithFormat:@"%d",a];
int b = [str
intValue];
d、@20 编译器特性,将20包装成一个NSNumber对象
要区别于NSString对象@“20”
包装变量int age = 100,@(age)即可
2、NSValue
1、NSNumber之所以能包装基本数据类型为对象,是因为继承了NSValue
2、将结构体包装成OC对象(以CGPoint为例),size,range,rect都可以
CGPoint p = CGPointMake(10, 10);
NSValue *value = [NSValue valueWithPoint:p];
3、将value转为对应的结构体
CGPoint p2 = [value pointValue];
NSDate *date = [NSDatedate];// 打印出的是0时区时间
2、离现在时间5秒的时间
NSDate *date2 = [NSDatedateWithTimeInterval:5sinceDate:date];
3、从1970开始走过的秒数
NSTimeInterval second = [date2
timeIntervalSince1970];
4、date2与当前时间间隔多少秒
NSTimeInterval second2 = [date2timeIntervalSinceNow];
5、日期格式化类
NSDateFormatter *formatter = [[NSDateFormatteralloc]init];
6、日期格式: y年 M月 d日 H时 m分 s秒 H (24)时 h (12)时
formatter.dateFormat =@"yyyy-MM-dd
HH:mm:ss";
7、Date转String
NSString *str = [formatterstringFromDate:date];
8、String转Date
NSSDate *date = [formatter dateFromString:time];// 需定义一个time
一、集合类
1、NSArray\NSMutableArraya、有序
b、快速创建(不可变):@[obj1,obj2]
c、快速访问元素:数组名[i]
2、NSSet\NSMutableSet
a、无序
3、NSDictionary\NSMutableDictionary
a、无序
b、快速创建(不可变):@{key1
: value1, key2 : value2}
c、快速访问元素:字典名[key]
4、NSArray和NSSet对比
a、共同点
(1)、都是集合,都能存放多个OC对象
(2)、只能存放OC对象,不能存放非OC对象(基本数据类型:int、char、float等,结构体,枚举)
(3)、本身都不可变,都有一个可变的子类
b、不同点
(1)、NSArray是有序的,NSSet是无序的
二、NSArray\NSMutableArray
1、NSArray:不可变数组a、NSArray的创建
(1) 、 // 这个数组永远是空数组
NSArray *array = [NSArray
array];
(2)、 // 一个元素的数组
NSArray *array2 = [NSArray
arrayWithObject:@"jack"];
(3)、
// 多个元素的数组
NSArray *array3 = [NSArray
arrayWithObjects:@"jack",@"rose",nil];
(4)、 //快速创建一个NSArray对象
NSArray *array4 = @[@"jack",@"jim",
@"rose"];
b、获取数组元素个数,输出用%ld
//[array2 count]
NSLog(@"%ld", array2.count);
c、获取数组元素
(1)、 //获取数组某个位置对应的对象
NSLog(@"%@", [array3
objectAtIndex:1]);
(2)、 // 新特性访问方式
NSLog(@"%@",array3[0]);
d、数组的遍历
(1)、
for (int i =
0; i<array4.count; i++) {
NSLog(@"%@", array4[i]);
(2)、快速遍历
for (id obj
in array
4000
4)
{ // 找出obj元素再数组中的位置
NSUInteger i = [array4 indexOfObject:obj];
NSLog(@"%ld-%@",i, obj);
}
(3)利用block遍历方式
// [array4 enumerateObjectsUsingBlock:<#^(id obj, NSUInteger idx, BOOL *stop)block#>]
[array4enumerateObjectsUsingBlock:
// 每遍历到一个元素,就会调用一次block,并且把当前元素和索引位置当做参数传给block
// *stop作用是为了退出循环,赋值为YES停止
^(id obj,NSUInteger idx,
BOOL *stop) {
NSLog(@"%ld-%@",idx, obj);
if(idx == 1)
{
// 停止遍历
*stop =YES;// 只有传地址block内部才可利用指针修改外部的BOOL类型变量
}
}];//注意分号别忘了
//NSEnumerationReverse参数为倒序遍历
[array enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
NSLog(@"4倒序遍历array:%ld-->%@",idx,obj);
}];
第四种遍历:利用枚举
NSEnumerator *en = [array objectEnumerator];
id obj;
int j = 0 ;
while (obj = [en nextObject]) {
NSLog(@"5遍历array:%d-->%@",j,obj);
j++;
}
e、使用注意:
(1)、OC数组—只能存放OC对象
(2)、OC数组不能存放nil值
(3)、OC数组只能存放OC对象、不能存放非OC对象类型,比如int、struct、enum等
2、NSMutableArray:可变数组
a、创建
(1)、NSMutableArray *array = [NSMutableArrayarray];
(2)、NSMutableArray *array2 = [NSMutableArrayarrayWithObjects:@"rose",@"jack",
nil];
(3)、不可以用@[]快速创建NSMutableArray
// NSMutableArray *array3 = @[@"rose", @"jack"];
b、添加元素
[array
addObject:[[Person
alloc]init]];
[array
addObject:@"jim"];
// 错误写法
// [array addObject:nil];
c、删除元素
// 删除所有对象
[array
removeAllObjects];
// 删除指定对象
[array
removeObject:@"jim"];
// 删除对应位置对象
[arrayremoveObjectAtIndex:1];
三、NSSet\NSMutableSet
1、NSSeta、创建方法:
(1)、创建一个空的set,不能添加元素
NSSet *s = [NSSetset];
(2)、NSSet *s1 = [NSSetsetWithObjects:@"jack",@"rose",@"jack1",@"rose1",@"jack2",nil];
b、随机拿一个元素
NSString *str = [s1anyObject];
2、NSMutableSet
a、创建方法
NSMutableSet *s = [NSMutableSetset];
b、添加元素
[saddObject:@"back"];
c、删除元素
[sremoveObject:@"back"];
四、NSDictionary\NSMutableDictionary
1、NSDictionarya、key ---> value
索引 --->文字内容
里面存储的东西都是键值对
b、创建方式:
(1)、NSDictionary *dict = [NSDictionarydictionaryWithObject:@"jack"forKey:@"name"];
(2)、先定义key数组和对象数组
NSArray *keys =@[@"name",@"address"];
NSArray *objects =@[@"jack",@"北京"];
NSDictionary *dict2 = [NSDictionarydictionaryWithObjects:objects
forKeys:keys];
(3)、NSDictionary *dict3 = [NSDictionary dictionaryWithObjectsAndKeys:
@"jack",@"name",
@"北京",@"address",
@"3243434",@"qq"
,nil];
(4)、编译器特性
NSDictionary *dict4 =@{@"name":@"jack",@"address":@"北京"};//定义用这个
c、获取key对应的value方法
(1)、id obj = [dict objectForKey:@"name"];
(2)、id obj2 = dict2[@"name"];//[]
内放key
d、返回的是键值对的个数
NSLog(@"%ld",dict2.count);
2、NSMutableDictionary
a、创建方式
NSMutableDictionary *dict =[NSMutableDictionarydictionary];
b、添加键值对
[dictsetObject:@"jack"forKey:@"name"];
[dictsetObject:@"北京"forKey:@"address"];
//将以前的key为@"name"的覆盖
[dictsetObject:@"rose"forKey:@"name"];
c、移除键值对
[dictremoveObjectForKey:@"address"];
d、数组打印结果用()括住
字典打印用{}括住,内容为key = value,打印所有键值对
e、不可以用@{}定义一个不可变字典
NSMutableDictionary *dict =@{@"name":@"jack"};
3、字典的遍历
(1)、
NSArray *keys = [dictallKeys];
for (int i =0; i<dict.count;
i++) {
NSString *key = keys[i];
NSString *object = dict[key];
NSLog(@"%@ = %@",key, object);
}
(2)、[dictenumerateKeysAndObjectsUsingBlock:
^(id key,id obj,BOOL *stop) {
NSLog(@"%@ = %@", key, obj);
}];
4、字典不允许有相同的key,但允许有相同的value(Object),字典是无序的
五、NSNumber和NSValue
1、NSNumbera、创建number对象,将基本数据类型转为NSNumber对象
NSNumber *num = [NSNumbernumberWithInt:10];
b、将NSNumber对象变为基本数据类型
int a = [num
intValue];
c、字符串和基本数据类型的转换
int a =20;
NSString *str = [NSStringstringWithFormat:@"%d",a];
int b = [str
intValue];
d、@20 编译器特性,将20包装成一个NSNumber对象
要区别于NSString对象@“20”
包装变量int age = 100,@(age)即可
2、NSValue
1、NSNumber之所以能包装基本数据类型为对象,是因为继承了NSValue
2、将结构体包装成OC对象(以CGPoint为例),size,range,rect都可以
CGPoint p = CGPointMake(10, 10);
NSValue *value = [NSValue valueWithPoint:p];
3、将value转为对应的结构体
CGPoint p2 = [value pointValue];
六、NSDate
1、创建一个时间对象NSDate *date = [NSDatedate];// 打印出的是0时区时间
2、离现在时间5秒的时间
NSDate *date2 = [NSDatedateWithTimeInterval:5sinceDate:date];
3、从1970开始走过的秒数
NSTimeInterval second = [date2
timeIntervalSince1970];
4、date2与当前时间间隔多少秒
NSTimeInterval second2 = [date2timeIntervalSinceNow];
5、日期格式化类
NSDateFormatter *formatter = [[NSDateFormatteralloc]init];
6、日期格式: y年 M月 d日 H时 m分 s秒 H (24)时 h (12)时
formatter.dateFormat =@"yyyy-MM-dd
HH:mm:ss";
7、Date转String
NSString *str = [formatterstringFromDate:date];
8、String转Date
NSSDate *date = [formatter dateFromString:time];// 需定义一个time
相关文章推荐
- C#学习笔记(六):类成员的其他议题
- 通过例子学习正则表达式(三)--检查E-mail地址及其他
- WEB标准学习路程之"入门篇":7.head其他设置
- 学习 SQL 语句 - Select(9): 其他
- 学习Java除了做web就没其他什么了吗?
- LoadRunner学习笔记 – LoadRunner的其他概念
- 学习JSP与Tomcat之转向其他jsp
- WPF and Silverlight 学习笔记(十二):WPF Panel内容模型、Decorator内容模型及其他
- Community Server其他学习文档
- 计算机科学与技术学习心得之计算机理论的一个核心问题--续谈其他的一些计算数学(转载)
- C/C++学习----第八章 其他及附录
- 【转】通过例子学习正则表达式(三)--检查E-mail地址及其他
- 写得蛮好的linux学习笔记 [转] 四其他
- 其他方面的学习
- 计算机科学与技术学习心得之一些其他的专业课程(转载)
- 从今天开始每天写C++或其他学习的知识的笔记,以激励自己
- C/C++学习----第八章 其他及附录
- (WPF学习记录)第四章 按钮与其他控件
- JPA学习总结(搜罗的其他前辈们的知识结晶加上自己的一点点心得)(1)
- 中国应该要学习其他国家的节约用水方法