iOS开发学习专题-基础知识(二)NSArray数组NSMutableArray可变数组NSSet集合NSMutableSet可变集合详细使用方式

本文主要讲解的是不可变数组NSArray可变数组NSMutableArray集合NSSet可变集合NSMutableSet详细使用方式包括类型和值之间的转换

文章是博主原创,转载请标明出处http://blog.csdn.net/werctzzz/article/details/70928738

首先来一个集合的详细方法~

#pragma mark NSSet 不可变集合
    // NSSet和NSArray有相似之处,都是存储不同的对象的地址
    // 但是NSArray是有序的集合,NSSet是无序的集合。
    // 在介绍完了NSSet就讲讲数组~
    // 基本知识:集合是一种哈希表,运用散列算法,查找集合中的元素比数组速度更快,但是它没有顺序。
    
    // 1.集合的初始化
    NSSet * set = [[NSSet alloc] initWithObjects:@"one",@"two",@"three",@"four", nil];
    NSLog(@"%ld",[set count]); //集合中对象的个数

    // 2.集合的判断
        // 2.1判断集合中是否拥有@“two”
        BOOL boolset1 = [set containsObject:@"two"];

        // 2.2判断两个集合是否相等
        NSSet * set2 = [[NSSet alloc] initWithObjects:@"one",@"two",@"three",@"four", nil];
        BOOL boolset2 = [set isEqualToSet:set2];

        //判断set是否是set3的子集合
        NSSet * set3 = [[NSSet alloc] initWithObjects:@"one",@"two",@"three",@"four",@"five", nil];
        BOOL boolset3 = [set isSubsetOfSet:set3];
    
    // 3.通过数组来初始化集合
        // 3.1数组转换为集合
        NSArray * changeArray1 = [[NSArray alloc] initWithObjects:@"one",@"two",@"three",@"four", nil];
        NSSet * changeSet = [[NSSet alloc] initWithArray:changeArray1];
        // 3.2集合转换为数组
        NSArray * changeArray2 = [changeSet allObjects];

#pragma mark NSMutableSet 可变集合
    
    // 1.可变集合初始化
    NSMutableSet * MutableSet = [[NSMutableSet alloc] init];
    
    // 2.内部元素的操作
        // 2.1增加元素
        [MutableSet addObject:@"one"];
        [MutableSet addObject:@"two"];
        [MutableSet addObject:@"two"];
        // 2.2删除元素
        [MutableSet removeObject:@"two"];
        [MutableSet removeAllObjects];
    
    // 3.集合的互相添加
        // 3.1将一个不可变集合中的元素添加到可变集合中来,如果有重复,只保留一个
        NSSet * addSet = [[NSSet alloc] initWithObjects:@"two",@"three",@"four", nil];
        [MutableSet unionSet:addSet];
        // 3.2删除set中与set2相同的元素
        [MutableSet minusSet:addSet];
    
    // 4.指数集合(索引集合)NSIndexSet
    NSIndexSet * indexSet1 = [[NSIndexSet alloc] initWithIndexesInRange:NSMakeRange(1, 3)]; //集合中的数字是123
    
    // 5.根据集合提取数组中指定位置的元素
    NSArray * arrayout1 = [[NSArray alloc] initWithObjects:@"one",@"two",@"three",@"four", nil];
    NSArray * newArray1 = [arrayout1 objectsAtIndexes:indexSet1]; //返回@"two",@"three",@"four"
    
    // 6.可变指数集合NSMutableIndexSet
    NSMutableIndexSet * indexSet2 = [[NSMutableIndexSet alloc] init];
    [indexSet2 addIndex:0];
    [indexSet2 addIndex:3];
    [indexSet2 addIndex:5];
    
    // 7.通过集合获取数组中指定的元素
    NSArray * arrayout2 = [[NSArray alloc] initWithObjects:@"one",@"two",@"three",@"four",@"five",@"six", nil];
    NSArray * newArray2 = [arrayout2 objectsAtIndexes:indexSet2]; //返回@"one",@"four",@"six"

接下来就是数组的详细使用方式~

#pragma mark NSArray 不可变数组
    NSString *str1 = @"1";
    NSString *str2 = @"2";
    NSString *str3 = @"3";

    //NSArray 常用方法
    //  1. 创建对象,初始化
    NSArray *arry1 = [[NSArray alloc]initWithObjects:str1,str2,str3, nil];
    NSLog(@"%@", arry1);
    
/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/
    
    //  2. 获取数组中的对象 根据数据在数组的位置 index
    NSString *obj = arry1[2]; // 注意类型要正确,不然会发生崩溃,如果类型不一致可以先转换
    NSLog(@"%@", obj);//1
    NSLog(@"%@", arry1[2]);//2
    NSLog(@"%@", [arry1 objectAtIndex:1]);//3

/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/
    
    //  3. 获取数组长度(元素个数)
    NSLog(@"%ld", [arry1 count]);
    
/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/
    
    //  4.查询某个对象的下标
    NSArray *arry2 = [NSArray arrayWithObjects:@"赵",@"张",@"靳",@"张",@"宋",nil];
    NSLog(@"%ld", [arry2 indexOfObject: @"靳"]);
    
/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/
#pragma mark NSMutableArray 可变数组
    //  1.初始化创建
    NSMutableArray *array = [NSMutableArray arrayWithObjects:@"张三",@"李四",@"王五",@"孙二",@"赵六",@"周七", nil];
    for (int i = 0; i < [array count]; i++){
        NSLog(@"%d%@", i, [array objectAtIndex:i]);
    }
    // ⭐️初始化需要注意的地方
    //    ①[NSMutableArray arrayWithCapacity:6]
    //    初始化可变数组对象的长度,如果后面代码继续添加数组超过长度6以后NSMutableArray的长度会自动扩充,6是自己可以设置的颗粒度。
    //    ②[array addObject:...]
    //    向可变数组尾部添加数据对象。
    //    ③[array addObjectsFromArray:..]
    //    向可变数组尾部添加一个数组对象。

/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/
    
    //  2.对数组内容的操作
        //  2.1添加元素
        [array addObject:@"钱八"]; //添加一个 @"钱八"进去array里面
        for (int i = 0; i < [array count]; i++){
            NSLog(@"%d%@", i, [array objectAtIndex:i]);
        }//钱八添加到array里面,在最后一个位置
        
        //  2.2插入元素
        [array insertObject:@"陈一" atIndex:2];
        for (int i = 0; i < [array count]; i++){
            NSLog(@"%d%@", i, [array objectAtIndex:i]);
        }//把 陈一 插入到指定下标位置,下标为2
        
        //  2.3删除元素
        [array removeObject:@"孙二"];//把 孙二 从数组里删除
        [array removeObjectAtIndex:5];//把下标为5的删除
        // 重温一下上一篇博客学的 NSRange 设置一个范围为 0 到 3 之间。
        NSRange range = NSMakeRange(0,3);
        [array removeObject:@"李四" inRange:range];//按范围删除
    
    // ⭐️删除操作时候要注意的地方
    //    ①[array removeObject:(id)] 删除数组中指定元素,根据对象isEqual消息判断。
    //    ②[array removeObjectAtIndex:(NSUInteger)] 删除数组中指定脚标索引的数据。
    //    ③[array removeObjectsInArray:(NSArray *)] 删除一个数组的元素。
    //    ④[array removeObjectIdenticalTo:(id)] 删除数组中指定元素,根据对象的地址判断
    //    ⑤[array removeObjectIdenticalTo:(id) inRange:(NSRange)] 在指定范围内删除指定的元素。
    
        // 遍历查看结果
        for (int i = 0; i < [array count]; i++){
            NSLog(@"%d%@", i, [array objectAtIndex:i]);
        }
    
        //  2.4替换元素
        [array replaceObjectAtIndex:4 withObject:@"坑爹"];//给据下标把内容替换
        for (int i = 0; i < [array count]; i++){
            NSLog(@"%d%@", i, [array objectAtIndex:i]);
        }

        //  2.5交换指定位置元素
        [array exchangeObjectAtIndex:2 withObjectAtIndex:4];//把二和四的下标元素替换
        for (int i = 0; i < [array count]; i++){
            NSLog(@"%d%@", i, [array objectAtIndex:i]);
        }



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值