Objective-C第六章Foundation框架的数组与可变数组

你好!我是小柒,今天我们来学习一下数组和可变数组。

数组

本节内容

1、数组

2、可变数组

一、数组

小柒什么是数组啊?

答;数组是个数据容器,可以往该容器里任意添加多个对象;数组中只能存放对象类型,不能存放基本数据类型;可以通过下标访问数组中的对象。

 

//NSArray

#import <Foundation/Foundation.h>

 

int main(int argc, const char * argv[]) {

    @autoreleasepool {

//___________________数组初始化____________________

//        1.空数组

        NSArray *array = [NSArray array];

        NSLog(@"array = %@",array);

//        2.一个元素的数组

        

        NSArray *array0 = [NSArray arrayWithObject:@"卡特琳娜"];

        NSLog(@"array0 = %@",array0);

        

        NSArray *array1 = [NSArray arrayWithObject:@"123"];

        NSLog(@"array1 = %@",array1);

        

        NSArray *array2 = [NSArray arrayWithObject:@"qwe"];

        NSLog(@"array2 = %@",array2);

        

        

//        3.多个数组,元素之间用逗号隔开,最后以nil结束

        NSArray *array3 = [NSArray arrayWithObjects:@"1",@"2",@"3", nil];

        NSLog(@"array3 = %@",array3);

//        4.多个数组二形态,注意最后一个元素不用加逗号

        NSArray *array4 = @[

                            @"12",

                            @"13",

                            @"14"

                            ];

        NSLog(@"array4 = %@",array4);

        

//_______________________常用方法__________________

        NSArray *array5 = @[

                            @"112",

                            @"131",

                            @"114"

                            ];

//        数组元素个数

        NSInteger count = array5.count;

//        第一个元素

        [array5 firstObject];

//        最后一个元素

        [array5 lastObject];

//        获取数组某个位置的元素

        [array5 objectAtIndex:2];

        

//        获取某个元素在数组中的位置

        NSInteger i = [array5 indexOfObject:@"114"];

        NSLog(@"i = %ld",i);

//        判断数组中有没有这个元素

        BOOL b = [array5 containsObject:@"12"];

        if (b) {

            NSLog(@"");

        }else{

            NSLog(@"没有");

        }

//——————————————————数组的遍历—————————————————————

        NSArray *array6 = @[

                            @"盖伦",

                            @"卡特琳娜",

                            @"黑默丁格"

                            ];

//        for循环遍历

        for (int i = 0; i < array6.count; i++) {

            NSString *str = array6[i];

            NSLog(@"str = %@",str);

        }

//        快速遍历

//        for(样式 参数名 in 数组对象)

//        {

//        打印参数名

//        }

        for (id oo in array6) {

            NSLog(@"oo = %@",oo);

        }

//       枚举遍历

//        获取数组所有元素的枚举器

        NSEnumerator *enumerator = [array6 objectEnumerator];

        id object;

//       第一次遍历,nextObject指向数组的首个元素,当取值结束以后,再指向下一个元素,直到取完最后一个元素,nextObject值为0,遍历结束。

        while (object = [enumerator nextObject])  {

            NSLog(@"object = %@",object);

        }

        

    }

    return 0;

}

 打印结果:

2016-01-26 11:39:19.757 Task[2050:47186] array = (

)

2016-01-26 11:39:19.758 Task[2050:47186] array0 = (

    "\U5361\U7279\U7433\U5a1c"

)

2016-01-26 11:39:19.758 Task[2050:47186] array1 = (

    123

)

2016-01-26 11:39:19.758 Task[2050:47186] array2 = (

    qwe

)

2016-01-26 11:39:19.758 Task[2050:47186] array3 = (

    1,

    2,

    3

)

2016-01-26 11:39:19.759 Task[2050:47186] array4 = (

    12,

    13,

    14

)

2016-01-26 11:39:19.759 Task[2050:47186] i = 2

2016-01-26 11:39:19.759 Task[2050:47186] 没有

2016-01-26 11:39:19.759 Task[2050:47186] str = 盖伦

2016-01-26 11:39:19.759 Task[2050:47186] str = 卡特琳娜

2016-01-26 11:39:19.759 Task[2050:47186] str = 黑默丁格

2016-01-26 11:39:19.759 Task[2050:47186] oo = 盖伦

2016-01-26 11:39:19.759 Task[2050:47186] oo = 卡特琳娜

2016-01-26 11:39:19.759 Task[2050:47186] oo = 黑默丁格

2016-01-26 11:39:19.761 Task[2050:47186] object = 盖伦

2016-01-26 11:39:19.761 Task[2050:47186] object = 卡特琳娜

2016-01-26 11:39:19.761 Task[2050:47186] object = 黑默丁格

Program ended with exit code: 0

//数组存放自定义对象

//  Student.h

#import <Foundation/Foundation.h>

 

@interface Student : NSObject

@property NSString *name;

@end

 

 

//  main.m

#import <Foundation/Foundation.h>

#import "Student.h"

int main(int argc, const char * argv[]) {

    @autoreleasepool {

//————————————————数组存放自定义类的对象—————————————

        Student *stu = [[Student alloc] init];

        stu.name = @"卡特琳娜";

        Student *stu1 = [[Student alloc] init];

        stu1.name = @"黑默丁格";

        NSArray *array = @[stu.name,

                           stu1.name

                           ];

        for (int i = 0; i < array.count; i++) {

            NSLog(@"array = %@",array);

            id stu2 = array[i];

            NSLog(@"stu2 = %@",stu2);

        

//————判断某个对象是否是某个类,多用于处理不确定的情况————

            if ([stu2 isKindOfClass:[Student class]]) {

                NSLog(@"[stu2 name] = %@",[stu2 name]);

            }

            for (Student *st in array) {

                NSLog(@"st%@",st);

            }

        }

    

        }

    

    return 0;

}

2016-01-26 11:41:42.750 Task2[2132:48749] array = (

    "\U5361\U7279\U7433\U5a1c",

    "\U9ed1\U9ed8\U4e01\U683c"

)

2016-01-26 11:41:42.751 Task2[2132:48749] stu2 = 卡特琳娜

2016-01-26 11:41:42.751 Task2[2132:48749] st卡特琳娜

2016-01-26 11:41:42.751 Task2[2132:48749] st黑默丁格

2016-01-26 11:41:42.751 Task2[2132:48749] array = (

    "\U5361\U7279\U7433\U5a1c",

    "\U9ed1\U9ed8\U4e01\U683c"

)

2016-01-26 11:41:42.751 Task2[2132:48749] stu2 = 黑默丁格

2016-01-26 11:41:42.752 Task2[2132:48749] st卡特琳娜

2016-01-26 11:41:42.752 Task2[2132:48749] st黑默丁格

Program ended with exit code: 0

//可变数组

//NSMutableArray

#import <Foundation/Foundation.h>

 

int main(int argc, const char * argv[]) {

    @autoreleasepool {

//        创建可变数组

        NSMutableArray *array = [NSMutableArray array];

        NSLog(@"array = %@",array);

//        arrayWithCapacity初始化指定长度

        NSMutableArray *array1 = [NSMutableArray arrayWithCapacity:10];

         NSLog(@"array1 = %@",array1);

        NSMutableArray *array2 = [NSMutableArray arrayWithObjects:@"卡特琳娜",@"盖伦",@"黑默丁格", nil];

         NSLog(@"array2 = %@",array2);

//        可变数组不可以使用该创建方法,因为该方法创建的数组是常量,也就是不可变数组

//        NSMutableArray *array3 = @[

//                                   @"卡特琳娜",

//                                   @"卡特琳娜",

//                                   ];

//        方法

//——————————————————————————————————————————————

        

        NSMutableArray *array3 = [NSMutableArray arrayWithCapacity:10];

//        增加单个元素

        [array3 addObject:@"123"];

        NSLog(@"array3 = %@",array3);

//        将一个数组的所有元素添加到原数组的尾部。

        [array3 addObjectsFromArray:@[@"q",@"w",@"e",@"r"]];

        NSLog(@"array3.1 = %@",array3);

//        将某个元素添加到数组指定位置,注意下标不要越界

        [array3 insertObject:@"wc" atIndex:1];

        NSLog(@"array3.2 = %@",array3);

        

//——————————————————————————————————————————————

        

        NSMutableArray *array4 = [NSMutableArray arrayWithObjects:@"1",@"2",@"3",@"4",@"5", nil];

        NSLog(@"array4 = %@",array4);

//        删除最后一个元素

        [array4 removeLastObject];

        NSLog(@"array4 = %@",array4);

//        删除某个元素

        [array4 removeObject:@"1"];

        NSLog(@"array4 = %@",array4);

//        删除某个位置的元素

        [array4 removeObjectAtIndex:0];

        NSLog(@"array4 = %@",array4);

//        删除数组所有元素

        [array4 removeAllObjects];

        NSLog(@"array4 = %@",array4);

//——————————————————————————————————————————————

        NSMutableArray *array5 = [NSMutableArray arrayWithObjects:@"1",@"2",@"3",@"4",@"5", nil];

//        用于给定对象,替换指定位置元素

        [array5 replaceObjectAtIndex:1 withObject:@"wc"];

        NSLog(@"array5 = %@",array5);

//        用于交换元素位置

        [array5 exchangeObjectAtIndex:1 withObjectAtIndex:2];

        NSLog(@"array5.1 = %@",array5);

//——————————————————————注意事项———————————————————

//        1、在给可变数组添加元素是,要保证该数组已被初始化。

//        2、在遍历可变数组时,不能对其进行增删改,但是不可变数组可以对数组元素进行筛选

//        3、可变数组是不能直接进行遍历的,必须先用一个不可变数组去接收可变数组

        NSMutableArray *array6 = [NSMutableArray arrayWithObjects:@"1",@"2",@"3",@"4",@"5", nil];

        NSArray *array7 = [NSArray arrayWithArray:array6];

        for (NSString *s in array7) {

            [array6 removeObject:@"1"];//没有任何效果

            NSLog(@"s = %@",s);

        }

        

    }

    return 0;

}

打印结果

2016-01-26 11:44:18.849 Task3[2215:50205] array = (

)

2016-01-26 11:44:18.850 Task3[2215:50205] array1 = (

)

2016-01-26 11:44:18.850 Task3[2215:50205] array2 = (

    "\U5361\U7279\U7433\U5a1c",

    "\U76d6\U4f26",

    "\U9ed1\U9ed8\U4e01\U683c"

)

2016-01-26 11:44:18.850 Task3[2215:50205] array3 = (

    123

)

2016-01-26 11:44:18.850 Task3[2215:50205] array3.1 = (

    123,

    q,

    w,

    e,

    r

)

2016-01-26 11:44:18.850 Task3[2215:50205] array3.2 = (

    123,

    wc,

    q,

    w,

    e,

    r

)

2016-01-26 11:44:18.851 Task3[2215:50205] array4 = (

    1,

    2,

    3,

    4,

    5

)

2016-01-26 11:44:18.851 Task3[2215:50205] array4 = (

    1,

    2,

    3,

    4

)

2016-01-26 11:44:18.851 Task3[2215:50205] array4 = (

    2,

    3,

    4

)

2016-01-26 11:44:18.851 Task3[2215:50205] array4 = (

    3,

    4

)

2016-01-26 11:44:18.851 Task3[2215:50205] array4 = (

)

2016-01-26 11:44:18.851 Task3[2215:50205] array5 = (

    1,

    wc,

    3,

    4,

    5

)

2016-01-26 11:44:18.851 Task3[2215:50205] array5.1 = (

    1,

    3,

    wc,

    4,

    5

)

2016-01-26 11:44:18.851 Task3[2215:50205] s = 1

2016-01-26 11:44:18.851 Task3[2215:50205] s = 2

2016-01-26 11:44:18.852 Task3[2215:50205] s = 3

2016-01-26 11:44:18.852 Task3[2215:50205] s = 4

2016-01-26 11:44:18.852 Task3[2215:50205] s = 5

Program ended with exit code: 0

 

 

//数组排序

//  Student.h

#import <Foundation/Foundation.h>

 

@interface Student : NSObject

@property NSString *name;

@property int age;

-(NSComparisonResult)compareWithName:(Student *)st;

-(NSComparisonResult)compareWithAge:(Student *)st1;

@end

 

 

 

//  Student.m

#import "Student.h"

 

@implementation Student

-(NSString *)description{

    return [NSString stringWithFormat:@"%@ , %d",_name,_age];

}

//比较方法的实现

-(NSComparisonResult)compareWithName:(Student *)stu{

    //对象的比较结果就相当于属性比较结果,self,最开始代表第0个元素,后面再比较时,代表交换后的满足条件的对象

    /*

     0  self a[0];

     1  self a[1]

     2  self a[2]

     */

    //self放在第一个参数是,代表升序,放在第二个参数时,代表降序    只有result1的时候才进行交换

    NSComparisonResult result = [stu.name compare: self.name];

    return result;

}

-(NSComparisonResult)compareWithAge:(Student *)stu1

{

    NSComparisonResult result = 0;

    

    if (self.age > stu1.age) {

        result = 1;

        NSLog(@"生序");

    }else{

        result = -1;

         NSLog(@"降序");

    }

    return result;

}

@end

 

 

//数组排序

#import <Foundation/Foundation.h>

#import "Student.h"

int main(int argc, const char * argv[]) {

    @autoreleasepool {

//————————————————————数组排序—————————————————————

//        1、要用排序的原数组调用实例方法,第二个参数,方法选择,如果数组的元素都是字符串,那么直接用compare:就行,如果是自定义对象,就需要改写compare

        NSArray *array = @[@"235",

                           @"523",

                           @"325",

                           @"352"

                           ];

        NSArray *array1 = [array sortedArrayUsingSelector:@selector(compare:)];

        NSLog(@"array1 = %@",array1);

//        此方法只能生序

        

//__________________自定义对象排序__________________

        Student *stu = [[Student alloc] init];

        stu.name = @"QQQ";

        stu.age = 12;

        Student *stu1 = [[Student alloc] init];

        stu1.name = @"WWW";

        stu1.age = 15;

        Student *stu2 = [[Student alloc] init];

        stu2.name = @"EEE";

        stu2.age = 14;

        NSArray *array2 = @[stu,

                            stu1,

                            stu2

                            ];

        NSArray *array3 = [array2 sortedArrayUsingSelector:@selector(compareWithName:)];

        NSLog(@"array3 = %@",array3);

       

 

        NSArray *array4 = [array2 sortedArrayUsingSelector:@selector(compareWithAge:)];

        NSLog(@"array4 = %@",array4);

    }

    return 0;

}

 

打印结果:

2016-01-26 11:46:01.516 Task4[2275:51311] array1 = (

    235,

    325,

    352,

    523

)

2016-01-26 11:46:01.517 Task4[2275:51311] array3 = (

    "WWW , 15",

    "QQQ , 12",

    "EEE , 14"

)

2016-01-26 11:46:01.517 Task4[2275:51311] 降序

2016-01-26 11:46:01.518 Task4[2275:51311] 生序

2016-01-26 11:46:01.518 Task4[2275:51311] 降序

2016-01-26 11:46:01.518 Task4[2275:51311] array4 = (

    "QQQ , 12",

    "EEE , 14",

    "WWW , 15"

)

Program ended with exit code: 0

 

posted on 2016-01-04 16:59  xxQMYxx  阅读(154)  评论(0编辑  收藏  举报

导航