oc 知识总结二(NSArray、NSMutableArray)

来源:互联网 发布:手机ip和端口查询 编辑:程序博客网 时间:2024/05/11 16:36

注:1、数组:是一组有序的对象的集合,通过索引下标获取到数组中的各个元素。

       2、数组中不可以存放基本数据类型,只能存放对象。如果需要将剧本数据类型放入数组中,需要通过NSNumber来放入。

一、不可变数组(NSArray)

1、创建NSArray

(1)方法一:创建空数组

NSArray *arr = [NSArrayarray];

(2)方法二:创建单个元素的数组

NSArray *arr = [NSArrayarrayWithObject:@"hello"];

(3)方法三:创建多个元素的数组

NSArray *arr = [NSArrayarrayWithObjects:@"hello",@"world",@"你好",@"!!!!",nil];//nil不是一个元素,此处是四个元素

(4)方法四:简化语法

NSArray *arr = @[@"对象1",@"对象2",@"对象3",@"对象4"];

(5)方法五:实例化方法(不推荐使用)

NSArray *arr = [[NSArrayalloc]initWithObjects:@"hello1",@"hi",nil];

NSArray *arr = @[@1,@2,@3,@4];

(6)方法六:用数组来创建数组

NSArray *arr2 = [NSArrayarrayWithArray:arr];

2、NSArray的常用方法
(1)通过下标获取元素
注:只有下标小于元素个数时,才可以使用下标获取元素,否则会报错:数组越界。

[arr objectAtIndex:0];

(2)获取数组元素的个数
    [arr count];
(3)判断是否包含某个对象
   contain
(4)对象在数组中的索引位置
objectAtIndex:
(5)连接数组中的字符串(数组中的元素都是字符串才可以使用此方法)

componentsJoinedByString:

(6)访问最后一个元素
1>objectAtIndex:[arr count]-1
2>lastObject
(7)在原来的数组上追加对象

[arr arrayByAddingObject:@"钱七"];

(8)数组中以某个字开头的元素

[[arr objectAtIndex:i]hasPrefix:@""];

(9)数组以特定的字符结尾的元素

[[arr objectAtIndex:i]hasSuffix:@""];

(10)将字符串拆分成数组

[str componentsSeparatedByString:@","];


3、数组的遍历方式
方式1:使用普通的for循环
代码部分

for(int i=0;i<[arr count];i++){

            NSLog(@"%i个元素是:%@",i+1,[arr objectAtIndex:i]);

        }


方式2:forIn变种循环
代码部分

//forin循环,自行循环,无需下标

        for(NSNumber *numin arr){

            NSLog(@"%@",num);

        }



两种方式的不同点:
(1)、for in变种循环(快速枚举),和普通循环不同的是,它无需循环条件,也无需循环迭代语句,这些部分都是由系统自动完成,当每个袁术都被迭代一次后,循环自动结束
(2)、方式一遍历效率低,方式二遍历效率高。

4、NSArray代码示例:

 // 1、倒序输出一个字符串数组@"ab",@"de",@"ij"

        NSArray *arr=@[@"ab",@"de",@"ij"];

        for(int i=[arrcount]-1;i>=0;i--){

            NSLog(@"%@",[arrobjectAtIndex:i]);

        }

       //2、统计字符串数组中指定的单词的个数@"how",@"do",@"you",@"do"统计@"do"的个数

        NSArray *arr1=@[@"how",@"do",@"you",@"do"];

        int count=0;

        for(NSString *strin arr1){

            if([str isEqualToString:@"do"]){

                count++;

            }

        }

//        for(int i=0;i<[arr1 count];i++){

//            if([[arr1 objectAtIndex:i] isEqualToString:@"do"]){

//                count++;

//            }

//            

//        }

         NSLog(@"do的个数是:%d",count);

        //3、一个字符串包含多个学生的名字,"张三,张思,王五,王三,赵六",统计姓王的学生的个数,统计名字叫三的学生的个数

        NSArray *arr2=[NSArrayarrayWithObjects:@"张三",@"张思",@"王五",@"王三",@"赵六",nil];

        int count1=0,count2=0;

        for(int i=0;i<[arr2count];i++){

            if([[arr2 objectAtIndex:i] hasPrefix:@""]){

                count1++;

            }

            if([[arr2 objectAtIndex:i] hasSuffix:@""]){

                count2++;

            }

        }

        NSLog(@"姓王的学生的个数是:%d,名字叫三的学生的个数是:%d",count1,count2);

        NSString *str1=@"张三,张思,王五,王三,赵六";

        NSArray *arr3=[str1componentsSeparatedByString:@","];

        int countWang=0;

        int countSan=0;

        for(NSString *studentNamein arr3){

            if([studentName hasPrefix:@""]){//判断开头

                countWang++;

               

            }

            if([studentName  hasSuffix:@""]){//判断末尾

                countSan++;

                

            }

        }

        NSLog(@"姓王的学生的个数是:%d,名字叫三的学生的个数是:%d",countWang,countSan);

         //判断是否包含指定对象(containObject

        //for循环前定一个bool变量,初始为no

        BOOL isContains=NO;

        for(NSString *stuNamein arr3){

            if([stuName isEqualToString:@"张三"]){

                isContains=YES;

                NSLog(@"有名字叫张三的学生");

                break;

            }else{

                NSLog(@"没有名字叫张三的学生");

            }

               

        }

//        if([arr3 containObject:@"张三"]){

//            NSLog(@"有名字叫张三的学生");

//                    

//        }else{

//            NSLog(@"没有名字叫张三的学生");

//        }

        

        //指定元素的位置索引

        NSUInteger index=[arr3  indexOfObject:@"张三"];

        NSLog(@"%i",index);

        //添加一个学生

        NSArray  *array=[arr3 arrayByAddingObject:@"钱七"];//在末尾添加

        NSLog(@"%i",[arraycount]);

        NSLog(@"%d",[arr3count]);//原来的数组是不变的,只是创建了一个新的

        

        NSString *strNew=[array componentsJoinedByString:@"#"];

        NSLog(@"%@",strNew);


示例输出结果:

二、NSMutableArray
注:可变数组(NSMutableArray),继承自不可变数组(NSArray)
1、创建可变数组
(1)创建空数组

NSMutableArray *arr=[NSMutableArrayarray];

(2)使用现有对象创建数组

NSMutableArray *arr=[NSMutableArrayarrayWithObjects:@"张三",@"李四",nil];

2、常用方法
(1)比较两个对象是否相等
         1>isEqual:
         2>isEqualToString:
(2)移除指定数组中包含的元素,如果有相同元素则删除
1>判断元素是否相等
2>讲相等的元素加在一个空数组中
3>从原来的数组中移除2>中的数组的对象

(3)设置数组

        //setArray设置数组

        //面向对象编程原则:里氏替换原则,父类对象可以用子类对象替换

        [arr2 setArray:arr1];

(4)添加元素

[arr2 addObject:@"王五"];

(5)在指定位置插入元素

//在头部插入一个insertObjexct(指定位置)

[arr2 insertObject:@"李四"atIndex:0];

(6)删除指定位置的元素

//删除指定位置的元素removeObjectAtIndex(通过索引来删除)

[arr2 removeObject:@"张三"];

(7)删除多个元素

//删除多个元素removeObjectsInArray(先把要删除的放在一个空的数组中,然后从原先数组中删除这个数组就可以了)


(8)替换索引的位置
replaceObjectsInArray:
(9)从一个数组中移除所有对象
removeAllObjects:
(10)移除指定下标的元素
removeObjectAtIndex:
(11)移除最后一个元素
removeLastObject

(12)模拟位置交换元素

exchangeObjectAtIndex:数字 withObject:要替换的对象

(13)查找元素在数组中的索引位置:

indexOfObject:

3、示例代码部分

 

        // 在学生数组张三、李四、王武中添加一个学生赵六

        //NSMutableArray定义

        NSMutableArray *arr=[NSMutableArrayarrayWithObjects:@"张三",@"李四",@"王武",nil];

        [arr addObject:@"赵六"];

        for(NSString *namein arr){

            NSLog(@"%@",name);

        }

         NSLog(@"______分割符__________");

        NSMutableArray *arr1=[NSMutableArrayarrayWithObjects:@"张三",@"李四",@"赵六",nil];

        [arr1 insertObject:@"王五"atIndex:2];

        for(NSString *strin arr1){

            NSLog(@"%@",str);

        }

         NSLog(@"______分割符__________");

        NSMutableArray *arr2=[NSMutableArrayarrayWithObjects:@"张三",@"李四",@"王五",@"赵六",nil];

        [arr2 removeObject:@"李四"];

        //forin中的类型是由数组决定的,如是Goods类,就是类名加对象

        for(NSString *namein arr2){

            NSLog(@"%@",name);

        }

        NSLog(@"______分割符__________");

        NSMutableArray *arr3=[NSMutableArrayarrayWithObjects:@"张三",@"李四",@"王五",@"赵六",nil];

        NSUInteger index=[arr3 indexOfObject:@"李四"];

        [arr3 removeObjectAtIndex:index];

        for(NSString *str1in arr3){

            NSLog(@"%@",str1);

        }

        NSLog(@"______分割符__________");

        NSMutableArray *arr4=[NSMutableArrayarray];

        for(NSString *name1in arr3){

            if([name1 isEqualToString:@"张三"]||[name1isEqualToString:@"李四"]){

                [arr4 addObject:name1];

                

                

            }

        }

        [arr3 removeObjectsInArray:arr4];

        for(NSString *str1in arr3){

            NSLog(@"%@",str1);

        }

       

 //替换指定索引位置的

        [arr replaceObjectAtIndex:0withObject:@"tree"];

        for(NSString *strin arr){

            NSLog(@"arr:%@",str);

        }

输出结果:




1 0
原创粉丝点击