OC语言笔记(三):OC数组和字典

本文详细介绍了Objective-C中的数组和字典操作方法,包括初始化、遍历、增删改查等核心功能,并通过示例代码展示了具体用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

提示:    

    COC的差别

    1C的数组,只能存一种类型,OC的数组,可以同时保存不同类型的对象

    2C的数组,一般保存基本数据类型,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,存了一个字符串,第一个元素里面的两个小数组的长度分别一次为23,存的都是字符串,内容一次为AB  ABC


    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,每个都是字符串,依次为:123456789JQK

    2:请分别使用forint i。。。)和forin)的方式遍历这个数组,并打印数组的每一个元素

    

    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的字典是一个 keyvalue的组合

一、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.字典的keyvalue应该成对出现,所以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,这个字典有4key-value组合,分别是title=nikeprice=10info=good shoespic=shoe picture

    请打印这个字典中的titlevalue

    请打印这个字典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、使用NSArrayalloc 方法和类方法,分别创建一个数组


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

}

}

]


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值