Objective-c 数组对象

  首先我们必须知道数组的概念:数组是有序的对象集合,一般情况下,一个数组的对象都是相同类型的。数组当中也存在可变数组和不可变数组。

  1. 不可变数组 (NSArray)

  可变数组 NSMutable 是不可变数组的子类,下面我们先了解一下 NSArray 的用法:

    

 

  下面通过一个程序例子,来看下它们的具体用法:

  1)首先是创建一个数组常用的3种方法:

   

 1 #import <Foundation/Foundation.h>
 2 
 3 @interface Student : NSObject{
 4     NSString *_name;
 5     int _age;
 6 }
 7 @property (copy,nonatomic)NSString *_name;
 8 @property (assign,nonatomic)int _age;
 9 -(id)init:(NSString *)name andage:(int)age;
10 @end
11 
12 @implementation Student
13 @synthesize _name,_age;
14 
15 -(id)init:(NSString *)name andage:(int)age{
16     self = [super init];
17     
18     if(self){
19         self->_name = [name copy];
20         self->_age = age;
21     }
22     
23     return self;
24 }
25 @end
26 
27 int main(int argc,char **argv){
28     @autoreleasepool {
29         //        NSArray *array1 = [NSArray arrayWithObjects:@"zhangsan",@"lisi",@"wangwu", nil];  普通的方法
30         
31         NSArray *array1 = @[@"zhangsan",@"lisi",@"wangwu"];     // 常用的简便的方法
32         for(NSString *temp in array1)
33             NSLog(@"temp = %@",temp);
34         
35         NSLog(@"-----------------");
36         //        NSArray *array2 = [NSArray arrayWithObjects:@11,@22,@33, nil];
37         NSArray *array2 = @[@11,@22,@33];
38         for(NSNumber *temp in array2)
39             NSLog(@"temp = %li",[temp integerValue]);
40         
41         NSLog(@"-----------------");
42         Student *stu1 = [[Student alloc] init:@"zhgnsan" andage:11];
43         Student *stu2 = [[Student alloc] init:@"lisi" andage:22];
44         Student *stu3 = [[Student alloc] init:@"wangwu" andage:33];
45         
46         //        NSArray *array3 = [NSArray arrayWithObjects:stu1,stu2,stu3, nil];
47         NSArray *array3 = @[stu1,stu2,stu3];
48         for(Student *temp in array3)
49             NSLog(@"name = %@,age = %i",[temp _name],[temp _age]);
50         
51     }
52 }

  2)遍历数组的方法:

  

 1 #import <Foundation/Foundation.h>
 2 
 3 @interface Student : NSObject{
 4     NSString *_name;
 5     int _age;
 6 }
 7 @property (copy,nonatomic)NSString *_name;
 8 @property (assign,nonatomic)int _age;
 9 -(id)init:(NSString *)name andage:(int)age;
10 @end
11 
12 @implementation Student
13 @synthesize _name,_age;
14 
15 -(id)init:(NSString *)name andage:(int)age{
16     self = [super init];
17     
18     if(self){
19         self->_name = [name copy];
20         self->_age = age;
21     }
22     
23     return self;
24 }
25 @end
26 
27 @interface NSString (print){
28 }
29 -(void)print;
30 @end
31 
32 @implementation NSString (print)
33 
34 -(void)print{
35     NSLog(@"%@",self);
36 }
37 
38 @end
39 
40 int main(int argc,char **argv){
41     @autoreleasepool {
42         NSArray *array1 = @[@"zhangsan",@"lisi",@"wangwu"]; //通过新增for遍历
43         for(NSString *temp in array1)
44             NSLog(@"temp = %@",temp);
45         
46         NSLog(@"--------------");
47         NSUInteger count = [array1 count];
48         for(NSUInteger i = 0; i < count; i++)
49             NSLog(@"array1[%li] = %@",i,array1[i]);
50         
51         NSLog(@"--------------");
52         for(NSUInteger i = 0; i < count; i++)
53             NSLog(@"array1[%li] = %@",i,[array1 objectAtIndex:i]);
54         
55         NSLog(@"--------------");
56         [array1 makeObjectsPerformSelector:@selector(print)];//使array中每个成员都执行一次print函数
57         
58         NSLog(@"------block--------");   //通过函数遍历
59         [array1 enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
60             NSLog(@"array1[%li] = %@",idx,obj);
61             if(idx == 1)
62                 *stop = YES;
63         }];
64 
65         NSLog(@"---------------");
66         NSEnumerator *enumer = [array1 objectEnumerator];   //通过枚举器进行遍历
67         NSString *temp = nil;
68         while(temp = [enumer nextObject]){
69             NSLog(@"temp = %@",temp);
70         }
71         
72         NSLog(@"---------------");
73         NSLog(@"array1 = %@",array1);
74         NSLog(@"---------------");
75         NSLog(@"array1 = %@",[array1 description]);
76     }
77 }

 

  3)写入和从文件读取的方法

  

 1 #import <Foundation/Foundation.h>
 2 
 3 @interface Student : NSObject{
 4     NSString *_name;
 5     int _age;
 6 }
 7 @property (copy,nonatomic)NSString *_name;
 8 @property (assign,nonatomic)int _age;
 9 -(id)init:(NSString *)name andage:(int)age;
10 @end
11 
12 @implementation Student
13 @synthesize _name,_age;
14 
15 -(id)init:(NSString *)name andage:(int)age{
16     self = [super init];
17     
18     if(self){
19         self->_name = [name copy];
20         self->_age = age;
21     }
22     
23     return self;
24 }
25 @end
26 
27 @interface NSString (print){
28 }
29 -(void)print;
30 @end
31 
32 @implementation NSString (print)
33 
34 -(void)print{
35     NSLog(@"%@",self);
36 }
37 
38 @end
39 
40 int main(int argc,char **argv){
41     @autoreleasepool {
42         NSArray *array1 = @[@"zhangsan",@"lisi",@"wangwu"]; //通过新增for遍历
43         for(NSString *temp in array1)
44             NSLog(@"temp = %@",temp);
45         
46         NSString *filename = @"name.plist";
47         BOOL iswrite = [array1 writeToFile:filename atomically:YES];    //写入文件
48         if(iswrite)
49             NSLog(@"write to file ok");
50         else
51             NSLog(@"write to file error");
52         
53         NSArray *array2 = [NSArray arrayWithContentsOfFile:filename];   //从文件读取
54         [array2 makeObjectsPerformSelector:@selector(print)];
55     }
56 }

  4)在数组中查找元素

  

 1 #import <Foundation/Foundation.h>
 2 
 3 @interface Student : NSObject{
 4     NSString *_name;
 5     int _age;
 6 }
 7 @property (copy,nonatomic)NSString *_name;
 8 @property (assign,nonatomic)int _age;
 9 -(id)init:(NSString *)name andage:(int)age;
10 @end
11 
12 @implementation Student
13 @synthesize _name,_age;
14 
15 -(id)init:(NSString *)name andage:(int)age{
16     self = [super init];
17     
18     if(self){
19         self->_name = [name copy];
20         self->_age = age;
21     }
22     
23     return self;
24 }
25 @end
26 
27 @interface NSString (print){
28 }
29 -(void)print;
30 @end
31 
32 @implementation NSString (print)
33 
34 -(void)print{
35     NSLog(@"%@",self);
36 }
37 
38 @end
39 
40 int main(int argc,char **argv){
41     @autoreleasepool {
42         NSArray *array1 = @[@"zhangsan",@"lisi",@"wangwu",@"zhangsan"];
43         NSString *str = [array1 objectAtIndex:1];   //查找指定下标的对象
44         NSString *str2 = array1[1];
45         NSLog(@"str = %@,str2 = %@",str,str2);
46         
47         BOOL ishas = [array1 containsObject:@"wangwu"]; //按指定值查找
48         if(ishas)
49             NSLog(@"");
50         else
51             NSLog(@"没有");
52         
53         NSString *str3 = [array1 firstObject];  //获取array中的第1个数据
54         NSString *str4 = [array1 lastObject];   //获取array中的最后的数据
55         NSLog(@"str3 = %@,str4 = %@",str3,str4);
56         
57         NSUInteger index = [array1 indexOfObject:@"zhangsan"];  //按值找下标,第1个
58         NSLog(@"index = %li",index);
59         
60         NSUInteger index2 = [array1 indexOfObject:@"zhangsan" inRange:NSMakeRange(index + 1, [array1 count] - 1)];  //在指定范围按值查找下标
61         NSLog(@"index2 = %li",index2);
62     }
63 }

  5)数组的添加和删除,注意这里的添加和删除并不会对原有数组产生影响,因为它是不可变的,修改后会生成一个新的数组。

  

 1 #import <Foundation/Foundation.h>
 2 
 3 @interface Student : NSObject{
 4     NSString *_name;
 5     int _age;
 6 }
 7 @property (copy,nonatomic)NSString *_name;
 8 @property (assign,nonatomic)int _age;
 9 -(id)init:(NSString *)name andage:(int)age;
10 @end
11 
12 @implementation Student
13 @synthesize _name,_age;
14 
15 -(id)init:(NSString *)name andage:(int)age{
16     self = [super init];
17     
18     if(self){
19         self->_name = [name copy];
20         self->_age = age;
21     }
22     
23     return self;
24 }
25 @end
26 
27 @interface NSString (print){
28 }
29 -(void)print;
30 @end
31 
32 @implementation NSString (print)
33 
34 -(void)print{
35     NSLog(@"%@",self);
36 }
37 
38 @end
39 
40 int main(int argc,char **argv){
41     @autoreleasepool {
42         NSArray *array1 = @[@"zhangsan",@"lisi",@"wangwu"];
43         NSArray *array2 = [array1 arrayByAddingObject:@"zhaoliu"];  //将某个对象加入到数组
44         NSLog(@"array2 = %@",array2);
45         
46         NSArray *array3 = @[@"aaa",@"bbb",@"ccc"];
47         NSArray *array4 = [array1 arrayByAddingObjectsFromArray:array3];    //将另一个数组数据加入到一个数组中,组成一个新的数组
48         NSLog(@"array4 = %@",array4);
49         
50         //        array1[0] = @"abc"; //不可变数组不能删除
51         NSArray *array5 = [array4 subarrayWithRange:NSMakeRange(3,3)];  //获得array指定范围的子数组
52         NSLog(@"array5 = %@",array5);
53     }
54 }

  6)数组的排序

  

 1 #import <Foundation/Foundation.h>
 2 
 3 @interface Student : NSObject{
 4     NSString *_name;
 5     int _age;
 6 }
 7 @property (copy,nonatomic)NSString *_name;
 8 @property (assign,nonatomic)int _age;
 9 -(id)init:(NSString *)name andage:(int)age;
10 -(NSInteger)cmpstuname:(Student *)stu;
11 -(NSInteger)cmpstuage:(Student *)stu;
12 @end
13 
14 @implementation Student
15 @synthesize _name,_age;
16 
17 -(id)init:(NSString *)name andage:(int)age{
18     self = [super init];
19     
20     if(self){
21         self->_name = [name copy];
22         self->_age = age;
23     }
24     
25     return self;
26 }
27 
28 -(NSInteger)cmpstuname:(Student *)stu{
29     return [self._name compare:stu._name];
30 }
31 
32 -(NSInteger)cmpstuage:(Student *)stu{
33     return self._age - stu._age;
34 }
35 @end
36 
37 
38 int main(int argc,char **argv){
39     @autoreleasepool {
40         NSArray *array1 = @[@"zhangsan",@"lisi",@"wangwu",@"zhangsan"];
41         NSLog(@"before sort array1 = %@",array1);
42         
43         NSLog(@"-------------------");
44         NSArray *array2 = [array1 sortedArrayUsingSelector:@selector(compare:)];
45         NSLog(@"after sort array2 = %@",array2);
46         
47         NSLog(@"-------------------");
48         NSArray *array3 = [array1 sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
49             return [obj1 compare:obj2];
50         }];
51         NSLog(@"after sort array3 = %@",array3);
52         
53         NSLog(@"-------------------");
54         Student *stu1 = [[Student alloc] init:@"zhangsan" andage:22];
55         Student *stu2 = [[Student alloc] init:@"lisi" andage:11];
56         Student *stu3 = [[Student alloc] init:@"wangwu" andage:33];
57         NSArray *stuarray = @[stu1,stu2,stu3];
58 //        NSArray *srotstuarr = [stuarray sortedArrayUsingSelector:@selector(cmpstuname:)]; //按名排序
59         NSArray *srotstuarr = [stuarray sortedArrayUsingSelector:@selector(cmpstuage:)];    //按年龄排序
60        for(Student *temp in srotstuarr)
61            NSLog(@"name = %@,age = %i",temp._name,temp._age);
62         
63         NSLog(@"----------------");
64         NSArray *sortstuarr2 = [stuarray sortedArrayUsingComparator:^NSComparisonResult(Student *obj1, Student * obj2) {
65             return [obj1._name compare:obj2._name];
66         }];
67         for(Student *temp in sortstuarr2)
68             NSLog(@"name = %@,age = %i",temp._name,temp._age);
69         
70         NSLog(@"----------------");
71         Student *stu4 = [[Student alloc] init:@"zhangsan" andage:11];
72         Student *stu5 = [[Student alloc] init:@"lisi" andage:22];
73         Student *stu6 = [[Student alloc] init:@"wangwu" andage:44];
74         NSArray *stuarray2 = @[stu4,stu5,stu6];
75         NSArray *allstuarray = [stuarray arrayByAddingObjectsFromArray:stuarray2];
76         for(Student *temp in allstuarray)
77             NSLog(@"name = %@,age = %i",temp._name,temp._age);
78 
79         //使用描述符排序
80         NSSortDescriptor *namescr = [NSSortDescriptor   sortDescriptorWithKey:@"_name" ascending:NO];   //第1排序为按名降序排序
81         NSSortDescriptor *agescr = [NSSortDescriptor sortDescriptorWithKey:@"_age" ascending:YES];  //第2排序为按年龄升序排序
82         NSArray *sortallstu = [allstuarray sortedArrayUsingDescriptors:@[namescr,agescr]];
83         NSLog(@"-------------- ");
84         for(Student *temp in sortallstu)
85             NSLog(@"name = %@,age = %i",temp._name,temp._age);
86     }
87 }

  7)分割和连接

  

 1 #import <Foundation/Foundation.h>
 2 
 3 @interface Student : NSObject{
 4     NSString *_name;
 5     int _age;
 6 }
 7 @property (copy,nonatomic)NSString *_name;
 8 @property (assign,nonatomic)int _age;
 9 -(id)init:(NSString *)name andage:(int)age;
10 @end
11 
12 @implementation Student
13 @synthesize _name,_age;
14 
15 -(id)init:(NSString *)name andage:(int)age{
16     self = [super init];
17     
18     if(self){
19         self->_name = [name copy];
20         self->_age = age;
21     }
22     
23     return self;
24 }
25 
26 @end
27 
28 
29 int main(int argc,char **argv){
30     @autoreleasepool {
31         NSString *path = @"/Users/user/workspace/OCTest/OCTest";
32         NSArray *patharray = [path componentsSeparatedByString:@"/"];   //将字符串按指定分隔符进行分割,分割形成数组
33         NSLog(@"patharray = %@",patharray);
34         
35         NSString *str = [patharray componentsJoinedByString:@"-"];  //将数组中的数组用指定的分隔符连接成字符串
36         NSLog(@"str = %@",str);
37     }
38 }

 2. 可变字符串 (NSMutable)

  因为它是 NSArray 的子类,所以它继承了 NSArray 中的一些方法,所以下面只介绍它的常用的方法构建和修改。首先先看一下它的方法:

  

 

 

 

  下面通过一个例子来具体看它的用法:

  1)构造

 1 #import <Foundation/Foundation.h>
 2 
 3 @interface Student : NSObject{
 4     NSString *_name;
 5     int _age;
 6 }
 7 @property (copy,nonatomic)NSString *_name;
 8 @property (assign,nonatomic)int _age;
 9 -(id)init:(NSString *)name andage:(int)age;
10 @end
11 
12 @implementation Student
13 @synthesize _name,_age;
14 
15 -(id)init:(NSString *)name andage:(int)age{
16     self = [super init];
17     
18     if(self){
19         self->_name = [name copy];
20         self->_age = age;
21     }
22     
23     return self;
24 }
25 
26 @end
27 
28 
29 int main(int argc,char **argv){
30     @autoreleasepool {
31 //        NSMutableArray *marray = @[@"zhangsan",@"lisi",@"wangwu"];    //错误,类型不一致
32         NSMutableArray *marray = [NSMutableArray arrayWithCapacity:12];
33         marray.array = @[@"zhangsan",@"lisi",@"wangwu"];
34         for(NSString *temp in marray)
35             NSLog(@"temp = %@",temp);
36         
37         NSLog(@"----------------");
38         NSArray *array = @[@"zhangsan",@"lisi",@"wangwu"];
39         NSMutableArray *marray2 = [NSMutableArray arrayWithArray:array];    //使用一个不可数组直接构造可变数组
40         for(NSString *temp in marray2)
41             NSLog(@"temp = %@",temp);
42         
43         NSLog(@"----------------");
44         NSMutableArray *marray3 = [[NSMutableArray alloc] initWithArray:array];
45         for(NSString *temp in marray3)
46             NSLog(@"temp = %@",temp);
47     }
48 }

 

  2)修改

  

 1 #import <Foundation/Foundation.h>
 2 
 3 @interface Student : NSObject{
 4     NSString *_name;
 5     int _age;
 6 }
 7 @property (copy,nonatomic)NSString *_name;
 8 @property (assign,nonatomic)int _age;
 9 -(id)init:(NSString *)name andage:(int)age;
10 @end
11 
12 @implementation Student
13 @synthesize _name,_age;
14 
15 -(id)init:(NSString *)name andage:(int)age{
16     self = [super init];
17     
18     if(self){
19         self->_name = [name copy];
20         self->_age = age;
21     }
22     
23     return self;
24 }
25 
26 @end
27 
28 
29 int main(int argc,char **argv){
30     @autoreleasepool {
31         NSMutableArray *marray = [NSMutableArray array];
32         [marray addObject:@"zhangsan"]; //将指定对象添加到数组
33         
34         NSArray *array = @[@"lisi",@"wangwu"];
35         [marray addObjectsFromArray:array]; //将指定数组添加数组
36         NSLog(@"marray = %@",marray);
37         
38         NSLog(@"---------------");
39         [marray insertObject:@"zhaoli" atIndex:1];  //向指定下标添加数据
40         NSLog(@"marray = %@",marray);
41         
42         NSLog(@"---------------");
43         [marray removeLastObject];  //删除最后一个
44         NSLog(@"marray = %@",marray);
45         
46         NSLog(@"---------------");
47         [marray removeObjectAtIndex:1]; //删除指定下标
48         NSLog(@"marray = %@",marray);
49         
50         NSLog(@"---------------");
51         [marray removeObject:@"zhangsan"];  //按值删除
52         NSLog(@"marray = %@",marray);
53         
54         NSLog(@"---------------");
55         [marray addObject:@"aaa"];
56         [marray addObject:@"bbb"];
57         [marray removeObjectsInRange:NSMakeRange(1, 2)];    //将指定范围的数据删除
58         NSLog(@"marray = %@",marray);
59         
60         NSLog(@"---------------");
61         [marray addObject:@"aaa"];
62         [marray addObject:@"lisi"];
63         [marray removeObject:@"lisi" inRange:NSMakeRange(0,3)]; //从指定范围删除指定对象
64         NSLog(@"marray = %@",marray);
65         
66         NSLog(@"---------------");
67         [marray removeAllObjects];  //删除所有数据
68         NSLog(@"marray = %@",marray);
69         
70     }
71 }

 

  

  

  

  

转载于:https://www.cnblogs.com/xiaozhai-1234/p/5262710.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值