• NSArray与NSMutableArray


    1.NSArray基本概念

    什么是NSArray

    NSArray是OC中的数组类,开发中建议尽量使用NSArray替代C语言中的数组

    NSArray有哪些使用注意

    1. 只能存放任意OC对象, 并且是有顺序的
    2. 不能存储非OC对象, 比如intfloatdoublecharenumstruct等
    3. 它是不可变的,一旦初始化完毕后,它里面的内容就永远是固定的, 不能删除里面的元素, 也不能再往里面添加元素
    4. NSArray使用NSLog()打印,输出的是小括号的格式。
    5. NSArray中不能存储nil,因为NSArray认为nil是数组的结束(nil是数组元素结束的标记)。nil就是0。0也是基本数据类型,不能存放到NSArray中。

    NSArray的常用方法

    - (NSUInteger)count;
    获取集合元素个数

    - (id)objectAtIndex:(NSUInteger)index;
    获得index位置的元素

    - (BOOL)containsObject:(id)anObject;
    是否包含某一个元素

    - (id)lastObject;
    返回最后一个元素

    - (id)firstObject;
    返回最后一个元素

    - (NSUInteger)indexOfObject:(id)anObject;
    查找anObject元素在数组中的位置(如果找不到,返回-1)

    - (NSUInteger)indexOfObject:(id)anObject inRange:(NSRange)range;
    在range范围内查找anObject元素在数组中的位置

    书写NSArray简写形式

    NSArray *arr = [NSArray arrayWithObjects:@"lnj", @"lmj", @"jjj", nil];
    NSArray *arr = @[@"lnj", @"lmj", @"jjj"];
    // 获取数组元素的简写
    NSLog(@"%@", [arr objectAtIndex:0]);
    NSLog(@"%@", arr[0]);

     

    2.NSArray遍历

    增强for 循环的使用

    如何使用增强for循环,遍历NSArray数组

    //逐个取出arr中的元素, 将取出的元素赋值给obj
    // 注意: obj的类型可以根据数组中元素的类型来写, 不一定要写NSObject
    for (NSString *obj in arr) {
        NSLog(@"obj = %@", obj);                     
    }

     

    如何使用OC数组的迭代器来遍历数组

    // 每取出一个元素就会调用一次block
    // 每次调用block都会将当前取出的元素和元素对应的索引传递给我们
    // obj就是当前取出的元素, idx就是当前元素对应的索引
    // stop用于控制什么时候停止遍历
    [arr enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
        if (idx == 1) {
            *stop = YES;
        }
        NSLog(@"obj = %@, idx = %lu", obj, idx);
    }];

    3.数组排序

    如何对数据进行排序

    NSArray *arr = @[@10, @20, @5, @7, @15];
    NSLog(@"排序前: %@", arr);
    // 注意: 想使用compare方法对数组中的元素进行排序, 那么数组中的元素必须是Foundation框架中的对象, 也就是说不能是自定义对象
    elector:@selectoNSArray *newArr = [arr sortedArrayUsingSr(compare:)];
    NSLog(@"排序后: %@", newArr);

    如何对对象进行排序

    Person *p1 = [Person new];
    p1.age = 10;
    
    Person *p2 = [Person new];
    p2.age = 20;
    
    Person *p3 = [Person new];
    p3.age = 5;
    
    Person *p4 = [Person new];
    p4.age = 7;
    
    NSArray *arr = @[p1, p2, p3, p4];
    NSLog(@"排序前: %@", arr);
    
    // 按照人的年龄进行排序
    
    // 该方法默认会按照升序排序
    NSArray *newArr = [arr sortedArrayWithOptions:NSSortStable usingComparator:^NSComparisonResult(Person *obj1, Person *obj2) {
        // 每次调用该block都会取出数组中的两个元素给我们
        // 二分
        //        NSLog(@"obj1 = %@, obj2 = %@", obj1, obj2);
        return obj1.age > obj2.age; //降序
        //        return obj1.age < obj2.age; //升序
        /*
         改方法,产生随机数用
         if (obj1.age > obj2.age) {
         // 5 4
         return NSOrderedDescending;
         }else if(obj1.age < obj2.age)
         {
         // 4 5
         return NSOrderedAscending;
         }else
         {
         return NSOrderedSame;
         }
         */
    }];
    NSLog(@"排序后: %@", newArr);

    4.NSArray和NSString转换

    NSArray *arr = @[@"lnj", @"lmj", @"jjj"];

    如何将数组中每个元素拼接成字符串

    方法一:

    // 1.定义一个可变字符串保存拼接之后的结果
    NSMutableString *strM = [NSMutableString string];
    // 2.遍历数组, 取出数组中的每一个元素, 将元素添加到可变字符串中
    for (NSString *str in arr) {
        [strM appendString:str];
        // 3.每次添加完毕之后再添加一个-
        [strM appendString:@"-"];
    }
    [strM deleteCharactersInRange:NSMakeRange(strM.length - 1, 1)];
    NSLog(@"strM = %@", strM);

     

    方法二:

    //把数组元素链接成字符串,用**作拼接符将数组元素拼接成一个字符串
    NSString *str = [arr componentsJoinedByString:@"**"];
    NSLog(@"str = %@", str);

    如何通过一个字符串生成一个数组

    字符串分割方法

    NSString *str = @"lnj**lmj**jjj";
    NSArray *arr = [str componentsSeparatedByString:@"**"];
    NSLog(@"arr = %@", arr);

    5.NSArray文件读写

    如何将数组写入文件中

    NSArray *arr = @[@"lnj", @"lmj", @"jjj"];
    BOOL flag = [arr writeToFile:@"/Users/xiaomage/Desktop/abc.plist" atomically:YES];
    NSLog(@"flag = %i", flag);

    将数组写入文件中,有什么注意点

    • 注意1:如果将一个数组写入到文件中之后, 本质是写入了一个XML文件 在iOS开发中一般情况下我们会将XML文件的扩展名保存为plist
    • 注意2:writeToFile只能写入数组中保存的元素都是Foundation框架中的类创建的对象, 如果保存的是自定义对象那么不能写入

    如何从文件中读取数据到NSArray中

    • 从文件中读取一个数组,此方法在字典转模型中,经常用到
    NSArray *newArray = [NSArray arrayWithContentsOfFile:@"/Users/xiaomage/Desktop/abc.plist"];
    NSLog(@"%@", newArray);

     

    6.NSMutableArray

    可变数组 增删改查

    什么是可变数组?和NSArray有什么区别

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

    如何创建一个空的数组?创建可变数组有什么注意点?

    1.创建空数组

    NSMutableArray *arrM = [NSMutableArray array];
    NSMutableArray *arrM = [[NSMutableArray alloc] init];

    2.注意点:

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

    例如:

    NSMutableArray *arrM = @[@"lnj", @"lmj"];
    [arrM addObject:@"JJJ"];

    如何给可变数组增加内容 方法一:

    [arrM addObject:@"lnj"];

     

    方法二:

    // 将指定数组中的元素都取出来, 放到arrM中 
        并不是将整个数组作为一个元素添加到arrM中
    [arrM addObjectsFromArray:@[@"lmj", @"jjj"]];
    // 注意: 以下是将整个数组作为一个元素添加
    //    [arrM addObject:@[@"lmj", @"jjj"]];
    NSLog(@"%@", arrM);

     

    如何给可变数组插入内容

    [arrM insertObject:@"xcq" atIndex:1];
    
    NSRange range = NSMakeRange(2, 2);
    NSIndexSet *set = [NSIndexSet indexSetWithIndexesInRange:range];
    // 插入一组数据, 指定数组需要插入的位置, 和插入多少个
    [arrM insertObjects:@[@"A", @"B"] atIndexes:set];

    如何删除可变数组中的内容

    删除指定元素:

    [arrM removeObjectAtIndex:0];

    删除数组中最后一个元素

    [arrM removeLastObject];

    删除index位置的元素

    [arrM removeObject:@"A"];

    如何替换可变数组中的内容

    [arrM replaceObjectAtIndex:1 withObject:@"M"];
    //简写:
    arrM[0] = @"ZS";
    NSLog(@"%@", arrM);

     

    如何获取可变数组中的内容

    NSLog(@"%@", [arrM objectAtIndex:0]);

     

  • 相关阅读:
    HBaseTDG ClientAPI The Basics
    Hadoop TDG 3 – MR Features
    NoSQL Data Modeling Techniques
    配置SharePoint 2010的User Profile Synchronization连接到第三方的LDAP服务
    Failed to load data access DLL, 0x80004005
    如何开放HyperV服务的远程连接权限给别人?
    SharePoint 2010 Search 架构 已完工
    如何对SharePoint里OOB的JavaScript文件进行Debug 之一
    UPA Sync Service启动之后立即自动停止
    SharePoint 2010服务器场的防火墙需要开放哪些端口?
  • 原文地址:https://www.cnblogs.com/dreamWanweidong/p/4998716.html
Copyright © 2020-2023  润新知