标签:
老师的代码
//
// main.m
// 数据类型练习一
//
// Created by 非凡 程序员 on 15/10/14.
// Copyright (c) 2015年 非凡 程序员. All rights reserved.
//
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
//传入规定格式的字符串,创建出一个新的字符串
//通常可变或者不可变都是针对于字符的序列进行更改和不可更改
//NSString *echo = [NSString stringWithFormat:@"%@ World, %i", @"Hello", 100];
//NSString 不可变的字符串
//NSMutableString 可变的字符串
//在OC中,直接赋值为不可变类型,一般可变类型都会需要申请内存空间
//申请一块空间,返回一个空字符串
NSMutableString *echoII = [NSMutableString string];
//返回一个空字符串,申请一个初始存储空间,可自动增长。
//NSMutableString *echoIII = [NSMutableString stringWithCapacity:10];
//追加字符串 append
[echoII appendString:@"Hello"];
//删除字符串 delete
//[echoII deleteCharactersInRange: ]
//查找相关的字符串
NSRange range = [echoII rangeOfString:@"H"];
//location代表找到的开始位置,length代表找到的长度,最小为0
NSLog(@"%lu , %lu", range.length , range.location );
//替换字符串
NSString *echoIII = [echoII stringByReplacingOccurrencesOfString:@"el" withString:@"111111"];
NSLog(@"%@",echoIII);
//判断两个字符串是否相等
NSString *stringI = @"1";
NSString *stringII = @"1";
if( [stringI isEqualToString:stringII] ){
NSLog(@"String Success");
}else{
NSLog(@"String Error");
}
NSLog(@"------- 数组练习 ------ " );
//数组包括 可变数组 NSArray 和 不可变数组 NSMutableArray
//数组即相同数据类型的有序集合,数组有下标,下标从0开始
NSArray *echoArray = @[ @"1", @"2" ];
//不可变是不可改变相关数组的序列
NSLog(@"%@", echoArray[1] );
//可变需要申请一块内存空间
NSMutableArray *echoMutableArray = [NSMutableArray array];
//申请初始的内存空间,返回一个空Array
NSMutableArray *echoMutableArrayI = [NSMutableArray arrayWithCapacity:10];
//把不可变的Array变成可变的Array
NSMutableArray *echoMutableArrrayII= [NSMutableArray arrayWithArray: echoArray];
//如果初始长度为2,那追加一个数据到可变数组里此事的长度为3,也就是最大下标就是2 ,追加用add
[echoMutableArrrayII addObject:@"3"];
//得到相关的数组的长度[echoMutableArrrayII count]
NSLog(@"%@, %li", echoMutableArrrayII[2], [echoMutableArrrayII count]);
//删除用remove
[echoMutableArrrayII removeObject:@"2"];//移除某一个元素
//[echoMutableArrrayII removeAllObjects];//移除全部
//替换某个下标的数据 为 某个数
[echoMutableArrrayII replaceObjectAtIndex:1 withObject:@"15"];
//查找某个下标的数据 遍历查找 echoMutableArrrayII[下标] C的写法
for( int i = 0 ; i < [echoMutableArrrayII count]; i++ ){
NSLog(@"for:%@", echoMutableArrrayII[i] );
}
// NSLog(@"%@, %li", echoMutableArrrayII[1], [echoMutableArrrayII count]);
for(NSString *object in echoMutableArrrayII){
NSLog(@"%@",object);
}
//判断2个数组是否相等
NSArray *arrayII = @[@"1"];
NSArray *arrayIII = @[@"1"];
if( [arrayII isEqualToArray: arrayIII] ){
NSLog( @"Success" );
}else{
NSLog( @"Error" );
}
NSLog(@"--------字典练习--------");
//------字典NSDictionary;字典是由键值对构成;字典的基本形式是@{@"KEY":@"VALUE",@"KEY":@"VALUE"}
//定义一个不可变字典
NSDictionary *dict=@{@"2":@"23"};
//对于一个字典他们的键可以是:id、NSNumber、NSString、NSArray、NSDictionary类型,同理,其值类型也是可以为NSString、NSArray、NSDictionary等
id number=@"sds";
NSDictionary *dict1=@{
@1:@"2",
@"2":@"22",
@[@"2",@"32"]:@"2",
@{@"2":@"5"}:@"3",
number:@"e3"
};
// 获取到所有键的值
NSLog(@"%@",[dict1 allKeys]);
// 获取到所有值(value)的值
NSLog(@"%@",[dict allValues]);
// 字典的获取方式
NSLog(@"%@",dict[@"2"]);
//-------可变字典NSMutableDictionary
// 定义一段内存空间
NSMutableDictionary *muDict=[[NSMutableDictionary alloc]initWithCapacity:10];
//不可变字典转化为可变字典的方式定义可变字典
NSMutableDictionary *mudict1=[[NSMutableDictionary alloc]initWithDictionary:dict];
// 键值通过两个数组设置值。注意:两个数组的个数要相同
NSMutableDictionary *mu=[[NSMutableDictionary alloc]initWithObjects:@[@"1",@"3"] forKeys:@[@"3",@"3"]];
// 通过键值同时设置的方式设置,注意这里是双数个数的对象,否则会出现键值不对应,是值-键-值-键的关系。
NSMutableDictionary *mudict6=[[NSMutableDictionary alloc]initWithObjectsAndKeys:@"one",@"1",@"two",@"2",@"three",@"3", nil];
//增加,再一个可变字典添加一个不可变字典
// [mudict6 addEntriesFromDictionary:dict];
NSLog(@"%@",mudict6);
//删除时删除的是键值对
// 按照键,去删除所对应键值对
// [mudict6 removeObjectForKey:@"1"];
// 一次删除多组建值对
// [mudict6 removeObjectsForKeys:@[@"1",@"2"]];
// 删除全部键值对
// [mudict6 removeAllObjects];
NSLog(@"%@",[mudict6 allKeys]);
// 逐个键值对添加
// setObject的forkey是可以传入id类型参数,而在setValue部分,只能传入NSString类型
[mudict6 setObject:@"23" forKey:@"name"];
[mudict6 setValue:@"44" forKey:@"age"];
NSLog(@"%@",mudict6);
//通过count计算键值对个数
NSLog(@"%li", [mudict6 count]);
NSLog(@"---------NSNumber练习--------");
//-------NSNumber类型:NSNumber 类型可以是Id、int、float、double、char,注意比
NSNumber *number1=[[NSNumber alloc]initWithInt:1];
NSNumber *number2=@1;
NSNumber *number3=number;
NSNumber *number4=@‘e‘;
NSNumber *number5=[[NSNumber alloc]initWithChar:‘2‘];
NSNumber *number6=@YES;
NSNumber *number7=[[NSNumber alloc]initWithBool:YES];
NSLog(@"%@",number3);
//---------------NSSet
/*
NSSet与NSArray对比:
NSSet中的元素可以重复,NSSArray不能重复
NSSet是有序的,NSSArray是无序的。
*/
NSLog(@"---------NSSet");
NSSet *set=[NSSet setWithObject:@"3"];
NSLog(@"%@",set);
// 关于NSString
//-----------------NSString类型---------------字符数组,是不可变字符串型,
//定义NSString对象
NSString *str=@"123";
// length 测量长度,是对象方法,用对象调用,用作长度比较。
//注意:在OC中一个汉字是一个字节
NSString *str1=@"1";
NSString *str2=@"w";
NSString *str3=@"人";
NSLog(@"一个数字的字节数%li-一个字母的字节数%li-一个汉字的字节数%li",[str1 length],[str2 length],[str3 length]);
//isEqualToString 比较内容,是有返回值的,其返回值是BOOL类型,是对象方法,用对象调用,在其参数是对比的字符串对象。其作用是对比字符串
BOOL compareResult=[str3 isEqualToString:str2];
NSLog(@"%i",compareResult);
if ([str3 isEqualToString:str2]) {
NSLog(@"内容一样");
}
else {
NSLog(@"内容不一样");
}
//字符穿转化数值转化
NSString *numberString=@"123";
int strToInt=[numberString intValue];
float strToFloat=[numberString floatValue];
double strToDouble=[numberString doubleValue];
NSLog(@"%i---%f---%f",strToInt,strToFloat,strToDouble);
//不可变字符的追加,追加一个和追加多个
NSString *str4=[str stringByAppendingString:str1];
NSString *str5=[str stringByAppendingFormat:@"%@--%@",@"green",@"blue"];
NSLog(@"%@=---=%@",str4,str5);
//比较两个字符串值的大小----大于返回1,相等返回0,小于返回-1,字母比较ASCII,
/*
在比较方法,范围参数指定的部分,而不是全部,接收器的使用比较。该范围不适用于搜索字符串。如,[”“AB”比较:@“ABC”选项:0范围:NSMakeRange(0,1)]比较“一”到“ABC”,而不是“一个”到“一”,并将nsorderedascending。
貌似默认的range比较双方最小的也就是两个比较数,一个两位,一个1位,之比较第一位
*/
NSString *num1=@"123";
NSString *num2=@"432";
NSInteger changenumber=[num1 compare:num2];
NSLog(@"%li",changenumber);
//此方法比较字母不区分大小写比较字母
long num=[num1 caseInsensitiveCompare:num2];
NSLog(@"%li",num);
/*
练习一:
根据〖中华人民共和国国家标准 GB 11643-1999〗中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。
西安的数字地址码为: 6101XX(其中XX表示区)
第十七位奇数:男性,偶数:女性
判断身份证是否为西安人,并显示生日,性别
练习二:
求字符串“158”和“39”按十进制数值做差后的结果以字符串形式输出。
练习三:
取出符串“123-456-789-000”中的数字部分,组成一个新的字符串输出。
练习四:
实现函数NSString * stringWithoutNum(NSString *str)。
删除字符串str的所有数字
(两种方法实现:1.从可变数组中删除数字 2.向可变数组中添加字符)
练习五:
实现函数:NSArray *kickOff10(NSArray *array)。
将数组中的@10去掉
*/
//------------ 字典复习
//[] 针对于定义不可变数组 {} 针对于定义不可变字典
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);
}
//---------- 结构体
//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]);
// NSPoint pointV= [valueArray[0] pointValue];
// NSLog(@"%f",pointV.x);
// ---------- NSNull--------
// 定义一个NSNull类型的对象
NSNull *null=[NSNull null];
NSLog(@"%@",null);
// 将这个对象放到数组里,创建一个空数组
NSArray *nullArray=@[null];
NSLog(@"%@",nullArray);
//练习:
// 建立一个数组,用来记录新生报到信息:其元素是学生姓名、学号(学生报到的时间小时和分钟构成)、学生所在队伍位置(X,Y)、学生报到时间
// 建立一字典,用来记录学生信息和班级,以班级为键,学生信息(数组)为值
// 输出某一学生信息
// 提高:如果第一个数组是用学生姓名作为键,数组作为值的字典,取出某位特定学生的信息
return 0;
}
标签:
原文地址:http://my.oschina.net/u/2483781/blog/517699