最近在学习基础数据结构类型,感觉没有什么别的捷径,就是多运用多练习。
贴出今天的代码。
/------------ 字典复习
创建不可变字典的三种方式
1、返回一个空字典
2、给一个存储空间、
3、返回一个字典,里面包含了一个不可变字典
//[] 针对于定义不可变数组 {} 针对于定义不可变字典
NSDictionary *reviseDict = @{ @"name" : @"jack", @"age" : @"10" };
//C的写法
NSLog(@"%@", reviseDict[@"name"]);
//OC的写法
NSLog(@"%@", [reviseDict objectForKey:@"name"] );
//简便的写法
//allValues 返回字典里所有的Value,allKeys 返回字典里所有的Key
NSLog(@"%@, %@", [reviseDict allValues], [reviseDict allKeys]);
//可变的字典 NSMutableDictionary
//第一种定义方式 返回一个空的字典
NSMutableDictionary *reviseMutableDict = [NSMutableDictionary dictionary];
//第二种定义方式 返回一个空的字典 并且创建一个初始的存储空间
NSMutableDictionary *reviseMutableDictI = [[NSMutableDictionary alloc]initWithCapacity:10];
//第三种定义方式 返回一个字典 里面包含里了一个已创建过的不可变的字典集合
NSMutableDictionary *reviseMutableDictII = [[NSMutableDictionary alloc]initWithDictionary:reviseDict];
//追加一个键值对
[reviseMutableDictII addEntriesFromDictionary:@{@"score":@"90"}];
//修改:C的写法
reviseMutableDictII[@"score"] = @"80";
//修改:OC的写法
[reviseMutableDictII setValue:@"70" forKey:@"score"];
//删除 根据单个键删除
[reviseMutableDictII removeObjectForKey:@"score"];
//删除 根据多个键(数组)删除
//[reviseMutableDictII removeObjectsForKeys:@[ @"name", @"age" ]];
//返回数组集合里面包含字典里的所有的Key数据
NSArray *keyArrayI = [reviseMutableDictII allKeys];
//利用Key数组的有序性,返回字典里的Value
for( int i = 0 ; i < [reviseMutableDictII count]; i++ ){
NSLog(@"key: %@, value: %@",keyArrayI[i], reviseMutableDictII[ keyArrayI[i] ]);
}
//---------------- 枚举
//C的枚举: 列举、集合、常数
enum jack{
age = 10,
score = 90
};
//typedef 定义类型的别名
//请注意在枚举不允许重复定义
typedef enum {
ageI = 10
}jackI;
//OC 常用枚举:是一个抽象类,它能枚举的形式把例如数组和字典等集合列举出来
NSArray *enumArray = @[ @"1", @"2", @"3", @"4" ];
NSDictionary *enumDict = @{ @"name" :@"jack" };
//返回的是一个集合里的枚举数据
NSEnumerator *enumrator = [enumArray objectEnumerator];
NSEnumerator *enumratorI = [enumDict objectEnumerator];
id arrayData;
//返回集合的下一个对象 列举
while( (arrayData) = [enumrator nextObject] ){
NSLog(@"enumrator : %@", arrayData);
}
while( (arrayData) = [enumratorI nextObject] ){
NSLog(@"enumrartorI : %@", arrayData);
}
/---------- 结构体
NSRange:前面是位置,后面是长度
NSRect: origin.x,origin.y,size.width,sze.height
NSPoint:前面是x后面是y
NSSize:前面是宽,后面是高
//C的结构体
//申明一个结构体,设置结构体里的属性
//注意:结构体不能在初始赋值
struct structI{
//NSString *name;
};
//注意:在OC的ARC(自动引用计数)的情况下,不能设置结构体属性
//struct structI structII= { .name = @"jack" };
//NSLog(@"structII name: %@", structII.name );
//OC:NSRange 、NSRect 、NSPoint 、NSSize
//结构体一般不需要指针表示
//NSRange: 一般用于描述一个范围,通常用于字符串、对象查找
//location: 起始位置 ,length: 长度
NSString *string = @"1234567890";
NSRange rangeII = NSMakeRange( 8, 2 );
//通过字符串返回范围
NSRange rangeI = [ string rangeOfString:@"90"];
//通过范围返回字符串
NSLog(@"%@", [string substringWithRange:rangeII]);
NSLog(@"location: %li, length: %li", rangeI.location, rangeI.length );
//NSPoint 用于描述一个坐标 x,y
NSPoint pointI = NSMakePoint( 3.4, 1.2 );
CGPoint pointII = NSMakePoint( 3.5, 1.3 );
NSLog(@"x:%.2f, y: %.2f", pointI.x, pointI.y );
NSLog(@"x:%.2f, y: %.2f", pointII.x, pointII.y );
//NSSize 用于描述一个宽高,width,height
NSSize sizeI = NSMakeSize( 300 , 120 );
CGSize sizeII = NSMakeSize( 300.1 , 120.1 );
NSLog(@"width : %.2f , height: %.2f", sizeI.width, sizeI.height);
NSLog(@"width : %.2f , height: %.2f", sizeII.width, sizeII.height);
//NSRect 用户描述一个坐标以及宽高
NSRect rectI = NSMakeRect( 1, 2.1, 100, 200.1);
NSLog(@"x: %.2f , y: %.2f , width: %.2f , height: %.2f",
rectI.origin.x, rectI.origin.y, rectI.size.width, rectI.size.height);
NSLog(@"----复习-----");
NSRange newRange=NSMakeRange(2, 3);
NSRange range2={2,3};
NSLog(@"%li--%li",newRange.length,newRange.location);
NSPoint newPoint=NSMakePoint(2, 1);
NSLog(@"%.2f--%.2f",newPoint.x,newPoint.y);
NSSize newSize=NSMakeSize(23, 40);
NSLog(@"%.2f----%.2f",newSize.width,newSize.height);
NSRect newRect=NSMakeRect(1, 2, 34, 45);
NSLog(@"%.2f---%.2f---%.2f--%.2f",newRect.origin.x,newRect.origin.y,newRect.size.width,newRect.size.height);
//NSDate类型
// 定义一个NSDate类型
NSDate *date1=[[NSDate alloc]init];
// 定义一个NSDate类型并设置值,date是NSDate的一个类方法,用来获取当前时间
NSDate *date=[NSDate date];
NSLog(@"now time %@",date);
// 设置时间格式-----将NSDate转换为NSString
NSDateFormatter *dateFormatter=[[NSDateFormatter alloc]init];
// 一般12小时制是hh来表示小时,24小时制用HH
[dateFormatter setDateFormat:@"yyyy年MM月dd HH:mm:ss"];
NSString *nowtime=[dateFormatter stringFromDate:date];
NSLog(@"%@",nowtime);
//----将NSString转换为NSDate
// 定义将要转化的日期
NSString *stringTime=@"2012年12月25 21:22:21";
// 定义一个时间类型的对象
NSDate *dateNew=[[NSDate alloc]init];
// 将NSString转换为NSDate
dateNew=[dateFormatter dateFromString:stringTime];
NSLog(@"========>%@",dateNew);
// NSValue是NSNumber的父类,可以将结构体“包装”放进数组里
// 回顾NSNumber
// 直接定义一个NSNumber
NSNumber *newNumber=@1;
// 定义一个NSNumber类型对象的方法----此处可以看做把基本元素“包装”为NSNumber类型(注意:数组里不能直接放int等类型,用NSNumber“包装”后或者用字符串表示的形式才可以放入数组)
NSNumber *Number2=[[NSNumber alloc]initWithFloat:23];
// 将NsNumber类型转换为float类型
float floatNum=[Number2 floatValue];
NSLog(@"%f",floatNum);
// 定义NSValue的方法
NSValue *valueNum=[[NSValue alloc]init];
// 讲NSRange转换为NSValue类型
NSValue *newValue=[NSValue valueWithRange:newRange];
// 数组不能直接装入结构体类型的对象,经过NSValue”包装“可以放入数组里
NSValue *pointValue=[NSValue valueWithPoint:newPoint];
NSArray *valueArray=@[newValue,pointValue];
NSLog(@"%@",valueArray);
NSLog(@"%@",valueArray[0]);
}
// ---------- NSNull--------
// 定义一个NSNull类型的对象
NSNull *null=[NSNull null];
NSLog(@"%@",null);
// 将这个对象放到数组里,创建一个空数组
NSArray *nullArray=@[null];
NSLog(@"%@",nullArray);