解析Objective-c 数组对象 (NSArray 和 NSMutableArray)

时间:2022-01-09 22:05:20

一、NSArray是静态数组,创建后数组内容及长度不能再修改。

实例:

[cpp] view plaincopy
  1. //用arrayWithObjects初始化一个不可变的数组对象。  
  2. //初始化的值之间使用逗号分开,以nil结束。  
  3. NSArray6 *city = [NSArray arrayWithObjects:@"上海",@"广州",@"重庆",nil];  
  4.   
  5. for(int i=0; i < [city count];i++){  
  6.     NSLog(@"%@",[city objectAtIndex:i]);  
  7. }  

运行结果:

上海
广州
重庆


NSArray常用方法:

[cpp] view plaincopy
  1. +(id)arrayWithObjects:obj1,obj2,...nil             //创建一个新的数组,obj1,obj2,.., 以nil结束。  
  2. -(BOOL)containsObject:obj                          //确定数组中是否包含对象obj  
  3. -(NSUInterger)count                                //数组中元素的个数  
  4. -(NSUInterger)indexOfObject:obj                    //第一个包含obj元素的索引号  
  5. -(id)ObjectAtIndex:i                               //存储在位置i的对象  
  6. -(void)makeObjectsPerformSelector:(SEL)selector    //将selector提示的消息发送给数组中的每一个元素  
  7. -(NSArray*)sortedArrayUsingSelector:(SEL)selector  //根据selector提定的比较方法对数组进行排序  
  8. -(BOOL)writeToFile:path atomically:(BOOL)flag      //将数组写入指定的文件中。如果flag为YES,则需要先创建一个临时文件  

二、NSMutableArray是动态数组,可以动态增加数组中的元素,同样NSMutableArray是NSArray的子类。
实例:

[cpp] view plaincopy
  1. //用arrayWithCapacity创建一个长度为5的动态数组  
  2. NSMutableArray *nsma = [MSMutableArray arrayWithCapacity:5];  
  3. for(int i=0;i<=50;i++) {  
  4.    if( i%3 == 0 ) {  
  5.        [nsma addObject:[NSNumber numberWithInteger:i]];   //用addObject给数组nsma增加一个对象  
  6.     }  
  7. }  
  8.   
  9. //输出数组中的元素  
  10. for(int i=0;i<[nsma count];i++) {  
  11.    NSLog(@"%li",(long)[[nsma objectAtIndex] integerValue]);  
  12. }  

数组排序例子:

student.h

[cpp] view plaincopy
  1. #import <Foundation/Foundation.h>  
  2. @interface Student: NSObject {  
  3.   NSString: *name;  
  4.   int age;  
  5. }  
  6. @property (copy,nonatomic) NSString* name;  
  7. @property int age;  
  8. -(void)print;  
  9. -(NSComparisonResult)compareName:(id)element;  
  10.   
  11. @end  

StudentTest.m

[cpp] view plaincopy
  1. #import <Foundation/Foundation.h>  
  2. #import "student.h"  
  3.   
  4. int main( int argc, const char* agrv[]) {  
  5.   NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];  
  6.   Student* stu1 = [[Student alloc] init];  
  7.   Student* stu2 = [[Student alloc] init];  
  8.   Student* stu3 = [[Student alloc] init];  
  9.    
  10.   [stu1 setName:@"Sam"];  
  11.   [stu1 setAge:30];  
  12.   [stu2 setName:@"Lee"];  
  13.   [stu2 setAge:23];  
  14.   [stu3 setName:@"Alex"];  
  15.   [stu3 setAge:26];  
  16.   
  17.   NSMutableArray *students = [[NSMutableArray alloc] init];  
  18.   [students addObject:stu1];  
  19.   [students addObject:stu2];  
  20.   [students addObject:stu3];  
  21.    
  22.   NSLog(@"排序前:");  
  23.   for(int i=0; i<[students count];i++) {  
  24.     Student *stu4 = [students objectAtIndex:i];  
  25.     NSLog(@"Name:%@,Age:%i",[stu4 name],[stu4 age]);  
  26.   }  
  27.   
  28.   [students sortUsingSelector:@selector(compareName:)];  
  29.   
  30.   NSLog(@"排序后:");  
  31.   for( Student *stu4 in students ) {  
  32.     NSLog(@"Name:%@,Age:%i", stu4.name, stu4.age);  
  33.   }  
  34.     
  35.   [students release];  
  36.   [stu1 release];  
  37.   [sut2 release];  
  38.   [stu3 release];  
  39.   [pool drain];  
  40.   
  41.    return 0;  
  42. }  

结果:

[plain] view plaincopy
  1. 排序前:  
  2. Name:Sam,Age:30  
  3. Name:Lee,Age:23  
  4. Name:Alex,Age:26  
  5. 排序后:  
  6. Name:Alex,Age:26  
  7. Name:Lee,Age:23  
  8. Name:Sam,Age:30  

NSMutableArray常用方法:

[cpp] view plaincopy
  1. +(id)array                                    //创建一个空数组  
  2. +(id)arrayWithCapacity:size                   //创建一个容量为size的数组  
  3. -(id)initWithCapacity:size                    //初始化一个新分配的数,指定容量为size  
  4. -(void)addObject:obj                          //将obj增加到数组中  
  5. -(void)insertObject:obj atIndex:i             //将obj插入数据的i元素  
  6. -(void)replaceObjectAtIndex:i withObject:obj  //用obj替换第i个索引的对象  
  7. -(void)removeObject:obj                       //从数组中删除所有是obj的对象  
  8. -(void)removeObjectAtIndex:i                  //从数组中删除索引为i的对象  
  9. -(void)sortUsingSelector:(SEL)selector        //用selector指示的比较方法进行排序  








//
//  main.m
//  11-OCFundation框架NSString学习
//
//  Created by 谷建鹏 on 14-3-31.
//  Copyright (c) 2014年 com.csdn. All rights reserved.
//


#import <Foundation/Foundation.h>


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


    @autoreleasepool {
        
        /*******************字符串的创建**************/
        
        //1)创建字符串的常量
        NSString *str =@"大家好才是真的好";
        NSLog(@"str = %@",str);
        
        //2)创建空字符串
        NSString *str2 = [[NSString alloc] init];
        NSString *str3 = [NSString string];
        NSLog(@"str2 = %@,str3 = %@",str2,str3);
        
        //3)快速创建字符串
        NSString *str4 = [NSString stringWithString:@"hello csdn"];  //类方法
        NSString *str5 = [[NSString alloc] initWithString:@"初始化字符串"]; //实例方法来实现 初始化
        NSLog(@"str4 = %@,str5 = %@",str4,str5);
        
        //4)快速创建一个格式化的字符串
        NSString *str6 = [[NSString alloc] initWithFormat:@"pi = %f",3.1415926];
        NSString *str7 = [NSString stringWithFormat:@"pi = %f",3.1415926];
        NSLog(@"str6 = %@,str7 = %@",str6,str7);
        
        //5)测试字符串是否相同
        NSString *str8 = @"csdn";
        NSString *str9 = [NSString stringWithString:@"csdn"];
        if ([str8 isEqualToString:str9]) {
            NSLog(@"the string same");
        }
        
        //6)测试字符串是否为同一个对象
        if (str8 == str9) {
            NSLog(@"str8 == str9!");
        }
        
        //7)比较字符串的大小
        // 原理: 字符串的每一个字母按照字典中出现的顺序比较,返回一个枚举类型的结果
        // 用的是:caseInsensitiveCompare 方法,返回值是:NSComparisonResult
        //NSComparisonResult 是一个枚举类型
        //假设有两个字符串 分别为:a  b
        //NSOrderedAscending = -1L,  表示升序 如果 a < b  返回值-1
        //NSOrderedSame              相同    如果 a =  b 返回值 0
        //NSOrderedDescending        降序    如果 a > b  返回值 1
        NSString *str10=@"aaddaba";
        NSString *str11=@"aaaaa";
        //字符串的比较
        NSComparisonResult result = [str10 caseInsensitiveCompare:str11];
        NSLog(@"result :%ld",result);
        
        //8)求字符串的长度
        NSString *str12 = @"asfsadfasdfasdf";
        NSLog(@"str12 length = %d",[str12 length]);
        
        //9)字符串的大小写转换的问题
        NSString *str13 = @"heLlo woRld!";
        NSLog(@"str12  uppercaseString = %@",[str13 uppercaseString]);
        NSLog(@"str12  lowercaseString = %@",[str13 lowercaseString]);
        NSLog(@"str12  capitalizedString = %@",[str13 capitalizedString]);
        
        //10)字符串和数值型进行转换
        NSString *str14 = @"3.1415926";
        //转换为int
        NSLog(@"str14转int:%d",[str14 intValue]);
        //转换为float
        NSLog(@"str14转float:%f",[str14 floatValue]);
        //转换为double
        NSLog(@"str14转double:%lf",[str14 doubleValue]);
        //转换为bool类型
        NSLog(@"str14转bool:%d",[str14 boolValue]);
        
        //11)字符串的分隔函数,将特定形式的字符串转换为数组
        NSString *str15 = @"aaa,bbb,ccc,ddd,eee,ffff";
        //思考:NSStrign *str15 = @"aaa,1#bbb,2#ccc,3#ddddd,4";
        NSArray *arr = [str15 componentsSeparatedByString:@","];
        NSLog(@"数组的第0个元素是:%@", [arr firstObject]);
        
        
        //12)字符串的截取函数:
        NSString *str16 = @"asfasdfasdf";
        //从开始位置(0)截取到指定位置(不包含指定位置)
        NSLog(@"str16 substring to loc :%@",[str16 substringToIndex:5]);
        //从指定位置开始(包含指定位置),截取到字符串的末尾
        NSLog(@"str16 substring loc to end :%@",[str16 substringFromIndex:5]);
        
        //13)根据范围(NSRange)来截取字符串
        NSRange range = {3,5};
        NSLog(@"str16 substring with range :%@",[str16 substringWithRange:range]);
        
        //14)拼接字符串,将新字符串插入到老字符串之后
        NSString *str17 = @"abc";
        NSString *str18 = @"def";
        //使用格式化的字符串进行拼接
        NSString *str19 = [str17 stringByAppendingFormat:@"%@",@"昂视方式大发顺丰"];
        NSString *str20 = [NSString stringWithFormat:@"%@%@",str17,str18];
        NSLog(@"str19 append format : %@",str19);
        NSLog(@"str20  stringwithformat : %@",str20);
        //使用指定字符串进行拼接
        NSLog(@"str19,1tr20 拼接成:%@",[str19 stringByAppendingString:str20]);
        
        //15)查找指定的字符串出现的位置
        NSString *str21 = @"dasfdsafasd.giffljsadlfjasla.pngsdfdf";
        NSRange range2 = [str21 rangeOfString:@".gif"];
        //NSNotFound 最大的整数,如果没有找到,则返回最大的整数
        if (range2.location != NSNotFound) {
            NSLog(@".png seach result :%@",NSStringFromRange(range2));
        }else{
            NSLog(@"Not Found!");
        }
        //思考题:判断字符串是否是一个邮箱
        
        //16)判断字符串的前缀和后缀
        NSString *str22 = @"http://www.csdn.net";
        //判断前缀
        if ([str22 hasPrefix:@"http://"]) {
            NSLog(@"网址合法");
        }
        
        //判断是否是图片的代码
        NSString *str23 = @"aaa.png";
        //判断后缀
        if ([str23 hasSuffix:@".png"]||[str23 hasSuffix:@".jpg"]||[str23 hasSuffix:@".gif"]) {
            NSLog(@"这是一张图片");
        }
        
        
    }
    return 0;
}