提示:
C和OC的差别
1、C的数组,只能存一种类型,OC的数组,可以同时保存不同类型的对象
2、C的数组,一般保存基本数据类型,OC的数组,只能保存对象
OC的数组
一、NSArray
1、实例化
1.1 alloc
NSArray *allocArray = [[NSArray alloc] initWithObjects:@"pp",nil,@"oo",@"qq", nil];
NSArray *pp = [[NSArray alloc] initWithObjects:@"A",@"B",@"C",@"D", nil];
//OC的数组以nil为结尾
NSLog(@"%@",allocArray);
1.2 类
NSArray *classArray = [NSArray arrayWithObjects:@"pp",@"qq",@"oo", nil];
NSLog(@"%@",classArray);
注意:当我们在打印的时候看见了(),就说明这是一个数组
2、数组的长度
int count = [classArray count];
NSLog(@"%d",count);
3、提取数组中某一个下标的元素
NSString *arrStr0 = [classArray objectAtIndex:0];
NSLog(@"%@",arrStr0);
练习:
1、请用类方法做一个数组,里面存了3个字符串:我是人,你也是,才怪。请取出数组的第二个元素,并打印
2、请用类方法做一个数组,数组长度为2,数组中第一个元素是一个数组,第二个元素也是一个数组,第一元素的数组长度是2,又是两个数组,第二个元素的数组长度是1,存了一个字符串,第一个元素里面的两个小数组的长度分别一次为2、3,存的都是字符串,内容一次为A、B A、B、C
NSArray *firstFirstArr = [NSArray arrayWithObjects:@"A",@"B", nil];
NSArray *firstSecondArr = [NSArray arrayWithObjects:@"A",@"B",@"C", nil];
NSArray *firstArr = [NSArray arrayWithObjects:firstFirstArr,firstSecondArr, nil];
NSArray *secondArr = [NSArray arrayWithObjects:@"A", nil];
NSArray *finalArr = [NSArray arrayWithObjects:firstArr,secondArr, nil];
NSLog(@"%@",finalArr);
4、数组的遍历
4.1 方法一
for(int i =0;i<[classArray count];i++)
{
NSLog(@"%@",[classArray objectAtIndex:i]);
}
4.2 方法二:快速遍历 for in遍历(遍历数组前已经获得了数组成员的个数,所以遍历的次数是固定的,不能对数组进行修改,否则可能出现越界错误)
for(NSString *tempStr in classArray)
{
NSLog(@"%@",tempStr);
}
for(NSArray *arr in finalArr)
{
NSLog(@"%@",arr);
}
NSArray *tempArr = [NSArray arrayWithObjects:@"A", nil];
NSArray *multiArr = [NSArray arrayWithObjects:@"pp",tempArr,tempArr,@"qq", nil];
NSLog(@"%@",multiArr);
for(id temp in multiArr)//当数组中存的元素类型不只是一个类的对象时,遍历要用id来接收
{
if([temp respondsToSelector:@selector(length)])//判断一个对象能否相应某种方法
{//如果能响应length说明这次循环找到的temp对象是个字符串
NSLog(@"字符串长度是%d",[temp length]);
}
if([temp respondsToSelector:@selector(count)])
{//如果能响应count说明这次循环找到的temp对象是个数组
NSLog(@"数组长度是%d",[temp count]);
}
}
练习:
1:请大家做一个数组,长度为4,每个都是字符串,依次为:123,456,789,JQK
2:请分别使用for(int i。。。)和for(in)的方式遍历这个数组,并打印数组的每一个元素
5、截取字符串
NSString *str = @"i like sleep,hahaha";
//我要把空格截掉,变成ilikesleep,hahaha
5.1、用componentsSeparatedByString方法,通过参数的内容,把这个字符串,截成一个数组
NSArray *strArr=[str componentsSeparatedByString:@" "];
NSLog(@"%@",strArr);
5.2、用componentsJoinedByString把数组每一位的字符串拼起来
NSString *finalStr = [strArr componentsJoinedByString:@""];
NSLog(@"%@",finalStr);
//@"今天是国庆节,我们看了中国军队,中国军队威武,中国军队万岁,中国军队霸气"//国军给改成XX
NSString *celebratStr = @"今天是国庆节,我们看了中国军队,中国军队威武,中国军队万岁,中国军队霸气";
NSArray *celebratArr = [celebratStr componentsSeparatedByString:@"国军"];
NSString *celebratFinalStr = [celebratArr componentsJoinedByString:@"XX"];
NSLog(@"%@",celebratFinalStr);
6、一次截一堆
NSString *setStr = @"<abcd 1234 z3c5 8jnh>";
//变成abcd1234z3c58jnh
6.1、先用一个设计好的想要切掉的内容的集合,把字符串切成数组
NSArray *setArr = [setStr componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"<> "]];
//[NSCharacterSet characterSetWithCharactersInString:@"<> "]会生成一个参数中字符串里字符的集合
NSLog(@"%@",setArr);
6.2、把切好的数组拼成字符串
NSString *setFinalStr = [setArr componentsJoinedByString:@""];
NSLog(@"%@",setFinalStr);
//把今天是国庆节,我们观看了中国军队阅兵,中国军队威武,我越发的热爱我的祖国了,但是在过程中,有日本记者捣乱,这些日本记者被中南海保镖关进了日租房
//请把国军、日本、中南海,变成X
NSString *manyStr = @"今天是国庆节,我们观看了中国军队阅兵,中国军队威武,我越发的热爱我的祖国了,但是在过程中,有日本记者捣乱,这些日本记者被中南海保镖关进了日租房";
NSArray *manyArr = [manyStr componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"中南海日本国军"]];
NSString *manyFinalStr = [manyArr componentsJoinedByString:@"X"];
NSLog(@"%@",manyFinalStr);
二、NSMutableArray
1、实例化一个NSMutableArray的对象
1.1 alloc
NSMutableArray *muArr = [[NSMutableArray alloc] initWithCapacity:0];
1.2 类
NSMutableArray *classMuArr = [NSMutableArray arrayWithCapacity:0];
2、增
2.1 方法一
NSLog(@"%@",muArr);
[muArr addObject:@"pp"];
NSLog(@"%@",muArr);
[muArr addObject:@"qq"];
NSLog(@"%@",muArr);
2.2 方法二 加塞
[muArr insertObject:@"oo" atIndex:1];
NSLog(@"%@",muArr);
3、改
[muArr replaceObjectAtIndex:0 withObject:@"mm"];
NSLog(@"%@",muArr);
4、删
4.1、删除最后一个
[muArr removeLastObject];
NSLog(@"%@",muArr);
//万恶的分界线,加一个再
[muArr addObject:@"ll"];
[muArr addObject:@"ll"];
[muArr addObject:@"ll"];
[muArr addObject:@"ll"];
[muArr addObject:@"ll"];
NSLog(@"%@",muArr);
4.2、删除特定位置(下标)的对象
[muArr removeObjectAtIndex:0];
NSLog(@"%@",muArr);
4.3、删除特定对象
//我要把@“ll”删掉
[muArr removeObject:@"ll"];
NSLog(@"%@",muArr);
4.4、全删
[muArr removeAllObjects];
NSLog(@"%@",muArr);
5、可变数组的交换,下面的方法只能用在可变数组
[muArr addObject:@"c"];
[muArr addObject:@"f"];
[muArr addObject:@"b"];
[muArr addObject:@"z"];
NSLog(@"%@",muArr);
//变成cbfz这样顺序的数组,第一个和第二个参数都是下标,顺序无所谓,最后把这两个下标对应的对象交换位置
[muArr exchangeObjectAtIndex:1 withObjectAtIndex:2];
NSLog(@"%@",muArr);
OC的字典是一个 key和value的组合
一、NSDictionary
1、实例化
1.1 alloc
NSDictionary *dic = [[NSDictionary alloc] initWithObjectsAndKeys:@"pp",@"name",@"18",@"age",@"male",@"sex",nil];
NSLog(@"%@",dic);
1.2类
NSDictionary *classDic = [NSDictionary dictionaryWithObjectsAndKeys:@"lily",@"name", nil];
NSLog(@"%@",classDic);
注意:
1.字典的key和value应该成对出现,所以nil前的对象应该是双数
2.字典中key-value的组合,value在前,key在后
3.同一个字典中,key不能重复
4.字典是无序的
5.当在打印的时候看见{},这就是字典
2、提取字典中的某一个值,就是用key来找value
NSString *dicStr = [dic objectForKey:@"age"];
NSLog(@"%@",dicStr);//通过上面objectForKey:的方法找到这个key对应的value值
//我想要classDic中的lily这个值?
NSLog(@"%@",[classDic objectForKey:@"name"]);
3、遍历字典(把一个字典中的key全拿出来,存成一个数组,然后遍历这个数组,从而达到遍历了字典里每一个key所对应的value的结果)
NSArray *dicArr = [dic allKeys];//使用allKeys方法,得到一个字典的所有key,返回一个数组,数组里就存着这些key
NSLog(@"%@",dicArr);
for(NSString *key in dicArr)
{
NSLog(@"%@",[dic objectForKey:key]);
}
练习:
请用类方法,做一个字典,名字叫goodDic,这个字典有4个key-value组合,分别是title=nike,price=10,info=good shoes,pic=shoe picture
请打印这个字典中的title的value
请打印这个字典key的个数
请打印这个字典所有的value
NSDictionary *goodDic = [NSDictionary dictionaryWithObjectsAndKeys:@"nike",@"title",@"10",@"price",@"good shoes",@"info",@"shoe picture",@"pic", nil];
NSLog(@"%@",goodDic);
NSLog(@"%@",[goodDic objectForKey:@"title"]);
NSArray *goodDicArr = [goodDic allKeys];
NSLog(@"%d",[goodDicArr count]);
for(int i = 0;i<[goodDicArr count];i++)
{
NSLog(@"%@",[goodDic objectForKey:[goodDicArr objectAtIndex:i]]);
}
for(NSString *goodKey in goodDicArr)
{
NSLog(@"%@",[goodDic objectForKey:goodKey]);
}
二、NSMutableDictionary 可变字典
1、实例化初始化
1.1 alloc
NSMutableDictionary *muDic = [[NSMutableDictionary alloc] initWithCapacity:0];
1.2类
NSMutableDictionary *muClassDic = [NSMutableDictionary dictionaryWithCapacity:0];
2、增
[muDic setObject:@"bike" forKey:@"name"];
[muDic setObject:@"yellow" forKey:@"color"];
[muDic setObject:@"16" forKey:@"radius"];
NSLog(@"%@",muDic);
3、删
3.1 根据key来删除对应的value
[muDic removeObjectForKey:@"color"];//根据key来删除对应的value
NSLog(@"%@",muDic);
3.2 全删
[muDic removeAllObjects];//全删
NSLog(@"%@",muDic);
课后作业:
1、使用NSArray的alloc 方法和类方法,分别创建一个数组
2、使用NSMutableArray的类方法,初始化一个空的可变数组
3、使用NSDictionary的alloc方法和类方法,分别创建一个字典
4、使用NSMutableDIctionary的类方法,初始化一个空的可变字典
5、使用两种遍历方法,打印@[@“1”,@“2”,@“3”]这个数组的每一个元素
6、使用数组的分割方法,将133-133-133这个字符串,改成133133133
7、使用数组的分割方法,将“我:是 中国人!”,改为“我是中国人”
8、初始化一个可变数组,然后向数组中添加三个字符串@“1”@“2”@“3”
9、将第8题的数组改为@“1”@“5”@“3”
10、清空第九题的数组
11、制作一个不可变字典,NSDictionary,有两个key:name、age,分别对应的value是lily、10,然后根据age找到他对应的value
12、遍历11题的字典,找到这个字典的所有的key,并根据这些key打印字典的所有value
13、初始化一个可变字典,向其中添加一个key:color,value:blue,然后再添加一个key:size,value:big
14、删除13题字典中size对应的value
15、对@[@“3”,@“1”,@“7”,@“9”,@“2”]进行排序
16、做一个数组,数组长度是3,字典里有三个key:name,age,tel,name和age对应的value是字符串,tel对应的value是字典,tel对应的字典有两个key,一个是mobil,一个是home,这两个key对应的value是字符串
遍历这个数组,并打印
大数组的字典:
NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:@“lily”,@“name”,@“18”,@“age”,[NSDictionary dictionaryWithObjectsAndKeys:@“13811178765”,@“mobile”,@“68686868”,@“home”,nil],@“tel”,nil];
[
{
name:XXX
age:XXX
tel:{
mobile:XXX
home:XXX
}
},
{
name:XXX
age:XXX
tel:{
mobile:XXX
home:XXX
}
},
{
name:XXX
age:XXX
tel:{
mobile:XXX
home:XXX
}
}
]