zoukankan      html  css  js  c++  java
  • Foundation框架(NSArray、NSMutableArray)

    第一讲 NSArray、NSMutableArray

    一、NSArray

    概述:NSArray是OC中的数组类,开发中建议尽量使用NSArray替代C语言中的数组,C语言中数组的弊端,int array[4] = {10, 89, 27, 76};只能存放一种类型的数据.(类型必须一致),不能很方便地动态添加数组元素、不能很方便地动态删除数组元素(长度固定)。

    使用注意:只能存放任意OC对象, 并且是有顺序的,不能存储非OC对象, 比如intfloatdoublecharenumstruct等它是不可变的,一旦初始化完毕后,它里面的内容就永远是固定的, 不能删除里面的元素, 也不能再往里面添加元素

    1、数组的创建  

    1 NSArray *array = [NSArray array];  //类方法创一个数组,这个数组永远为空
    2 NSArray *arr = [[NSArray alloc]init];   //对象方法创建一个数组,这个数组永远为空
    3 NSArray *array2 = [NSArray arrayWithObject:@“jack”];  //类方法创建含有一个元素的数组
    4 NSArray *array3 = [NSArray arrayWithObjects:@"jack", @"rose", nil]; //创建含有多个元素的NSArray数组
    5 NSArray *array4 = @[@"jack", @"rose", @“4324324"]; // 快速创建一个NSArray数组

    2、数组的访问 

    1 NSArray *array4 = @[@"jack", @"rose", @"4324324"];
    2 NSLog(@"%ld", array4.count);//输出数组元素个数
    3 NSLog(@"%@", [array4 objectAtIndex:1]); //访问数组中索引为1的元素
    4 NSLog(@"%@", array4[0]);//访问数组中索引为0的元素
    5 NSLog(@"last =%@",[array4 lastObject]);  //访问数组中的最后一个元素
    6 NSLog(@"first = %@",[array4 firstObject]); //访问数组的的第一个元素

    3、数组的遍历

     1 //1.常规遍历
     2 NSArray *arr = [NSArray arrayWithObjects:@"jjj",@"ddd",@"yyy",@"vvv", nil];
     3 for (int i = 0; i < arr.count; i++) {
     4 NSLog(@“%@",arr[i]);
     5 }
     6 //2.增强for循环
     7 for (NSObject *obj in arr ) {
     8   NSLog(@"obj = %@",obj);
     9 }
    10 //3.OC迭代器
    11 [arr enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
    12 if (idx == 2) {
    13 *stop = YES;
    14 }
    15 NSLog(@"obj =%@,idx = %lu",obj,idx);
    16 }];

    4、自定对象数组方法调用  

     1 //假设person类中有say 和 sayWithName:withObject方法
     2 - (void)say
     3 {
     4     NSLog(@"加油");
     5 }
     6 - (void)sayWithName:(NSString *)name
     7 {
     8     NSLog(@"%@ 加油", name);
     9 }
    10 NSArray *arr1 = @[p,p1,p2,p3,p4];
    11 //第一种方式 调用无参的
    12 [arr1 enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
    13 [obj say];
    14 }]
    15 //第二种方式 调用无参的
    16 [arr1 makeObjectsPerformSelector:@selector(say)];
    17 //调用有参的
    18 [arr1 makeObjectsPerformSelector:@selector(sayWithName:) withObject:@"tg" ];

    5、数组的排序

     1 //1.OC对象数组的排序
     2 NSArray *arr = [NSArray arrayWithObjects:@81,@22,@53,@34,@8, nil];
     3 //数组的排序方法 sortedArrayUsingSelector
     4 NSArray *newStr = [arr sortedArrayUsingSelector:@selector(compare:)];
     5 NSLog(@"%@",newStr); //输出结果:8,22,34,53,81
     6 //2.自定义对象数组的排序
     7 Person *p = [[Person alloc]init];
     8 p.age = 14 ;
     9 Person *p1 = [[Person alloc]init];
    10 p1.age = 210 ;
    11 Person *p2 = [[Person alloc]init];
    12 p2.age = 50 ;
    13 Person *p4 = [[Person alloc]init];
    14 p4.age = 20 ;
    15 Person *p3 = [[Person alloc]init];
    16 p3.age = 54 ;
    17 NSArray *arr =@[p,p1,p2,p3,p4];
    18 NSArray *newArr = [arr  sortedArrayWithOptions:NSSortStable usingComparator:^NSComparisonResult(Person *obj1, Person *obj2) {
    19     return obj1.age > obj2.age; // 二分法
    20 }];
    21 NSLog(@“输出排序后的数组%@",newArr);

    6、NSArray和NSString之间的转换

      1)数组之间的元素用"-"连接

    1 //数组元素之间用-相连
    2 NSArray *arr = @[@"lnj",@"lmj",@"jjj"];
    3 NSMutableString *strM = [NSMutableString string];
    4 for(NSString *str in arr ) {
    5 [strM appendString:str];
    6 [strM appendString:@"-"];
    7 }
    8 [strM deleteCharactersInRange:NSMakeRange(strM.length-1, 1)];
    9 NSLog(@"%@",strM); //输出结果:lnj-lmj-jjj

      2)数组之间的元素用"**"连接

    1 NSArray *arr = @[@"lnj",@"lmj",@"jjj"];
    2 NSString *str = [arr componentsJoinedByString:@"**"];
    3 NSLog(@"str = %@",str);  //输出结果:str = lnj**lmj**jjj

      3)将一个字符串切割成数组

    1 //将一个字符串切割成数组
    2 NSString *str = @"lnj*lmj*zyt";
    3 NSArray *arr = [str componentsSeparatedByString:@"*"];
    4 NSLog(@"arr = %@",arr);

     7、数组的读写

      1)将数组写入到文件中

     1 //数组中的元素须是Foundation框架中得OC对象
     2 NSArray *arr = @[@"rty",@"xds",@"yer"];
     3 BOOL flag =[arr writeToFile:@"/Users/tangge/Desktop/赵玉堂.plist" atomically:YES];
     4 NSLog(@"flag = %d",flag);
     5 
     6 //数组元素是自定义对象不能写入到文件中
     7 Person *p = [[Person alloc] init];
     8 p.age = 13;
     9 Person *p1 = [[Person alloc] init];
    10 p.age = 25;
    11 Person *p2 = [[Person alloc] init];
    12 p.age = 34;
    13 Person *p3 = [[Person alloc] init];
    14 NSArray *arr = @[p,p1,p2,p3,p4,p5];
    15 bool flag = [arr writeToFile:@"/Users/tangge/DeskTop/堂哥.plist" atomically:YES ];  //报错
    16 NSLog(@"%d",flag);  

      2)从文件中读取数组

    1 NSString *path = @"/Users/tangge/DeskTop/赵玉堂.plist";
    2 NSArray *arr = [NSArray arrayWithContentsOfFile:path];
    3 NSLog(@"%@",arr);

    8、判断一个数组是否包含某一元素

    1 NSArray *arr = [NSArray arrayWithObjects:@"zyt",@"yyu",@"zjj", nil];
    2 if ([arr containsObject:@"yt"]) {
    3     //包含返回YES,否则包含NO
    4     NSLog(@"arr中包含zyt");
    5 }
    6 else
    7 {
    8     NSLog(@"arr中不包含zs");
    9 }      

    二、NSMutableArray

    概述:NSMutableArray是NSArray的子类,NSArray是不可变的,一旦初始化完毕后,它里面的内容就永远是固定的, 不能删除里面的元素, 也不能再往里面添加元素,NSMutableArray是可变的,随时可以往里面添加更改删除元素。

    1、NSMutableArray的创建

    1 NSMutableArray *array = [NSMutableArray array]; //创建一个空的可变数组
    2 NSMutableArray *array = [NSMutableArray arrayWithObject:@"zyt"];//创建含一个元素的可变数组
    3 NSMutableArray *array = [NSMutableArray arrayWithObjects:@"rose", @"jim", nil]; //创建含有多个元素可变数组

    2.NSMutableArray基本使用

     1 NSMutableArray *array = [NSMutableArray arrayWithObjects:@"rose", @"jim", nil]; //创建一个可变数组
     2 [array addObjectsFromArray:@[@"zyt",@"ttt",@"ggg"]];//将指定数组中得元素都取出来,放到array中,并不是将整个数组作为一个元素添加arrM数组中
     3 [array addObject:@“jack"];  //向数组添加一个元素,不能向数组中添加空元素 [array addObject:nil]
     4 [array addObject:@[@“lmj",@"lng"]]; //以下是将整个数组作为一个元素推添加
     5 [array insertObject:@"XCQ" atIndex:0];   //通过指定索引向array中插入一个元素
     6 [array removeAllObjects];  // 删除数组所有元素
     7 [array removeObject:@"jack"];// 删除指定的对象
     8 [array removeObjectAtIndex:0];//删除索引对应位置的元素
     9 [array removeLastObject];  // 删除最后一个元素
    10 [array replaceObjectAtIndex:0 withObject:@“C"]; //替换指定索引位置的元素
    11 array[0] = @"wwwww";//替换指定位置的元素
    12 //插入一组数数据,指定数组需要插入的位置 和 需要插入的个数
    13 NSRange range = NSMakeRange(0, 2);
    14 NSIndexSet *set =[NSIndexSet indexSetWithIndexesInRange:range];
    15 [array insertObjects:@[@"A",@"B"] atIndexes:set];

    3、NSArray和NSMutableArray比较

    NSArray是可变的,NSMutableArray是不可变的。NSMutableArray不能通过@[]来创建一个不可变数组,因为@[]创建出来的是一个不可变数组,如果把一个不可变数组当做一个可变数组会引发一个运行时错误。

  • 相关阅读:
    RESTful 、RESTful API 、REST 介绍
    微服务 第三章:SpringBoot 创建web项目(调用jsp)
    微服务 第二章:SpringBoot 创建web项目(用Thymeleaf模板引擎)
    SpringBoot学习之 Thymeleaf
    Junit测试
    ---run-pat 测试 crontab 命令
    ---iproute2 策略路由
    ---曾经整混的两个词
    ---Under Ubuntu 14.04
    ---Ubuntu 14.04 虚拟机器和主机时间同步
  • 原文地址:https://www.cnblogs.com/zhaoyutang/p/4626985.html
Copyright © 2011-2022 走看看