OC-集合1(数组)

  • OC中的集合类
  • 数组NSArray
  • 可变数组NSMutableArray
  • 字典NSDictionary
  • 可变字典NSMutableDictionary
  • 集NSSet

OC的集合类

  • OC语言的集合不再是单纯的数组,而是分为3大类:数组NSArray,字典NSDictionary,集NSSet;平常使用的集合都是这3类,或者他们的子类;

  • OC语言的所有集合都是对象;

  • 集合中的元素也都是对象,集合中也只能存放对象;

  • 简单及复杂数据类型(int、double、CGPoint、CGRect)可以封装为NSValue、NSNumber对象再放入集合类中;

  • 集合中不能存放nil空对象,nil是作为集合结束标识符;

  • OC集合没有多维的概念,也就是不会出现根本意义上的二维数组,我们可以简单的这样理解:在数组中存放了一个对象,这个对象是数组;

  • 集合的所有运算依赖于方法,但是多数情况下依旧要使用循环。

数组

  • OC中的集合类只能收集cocoa对象(NSObject对象),C数据类型(例如:int、float、double、BOOL等),需要封装成NSNumber类型的,才可以保存在集合类中。(NSNumber对象是cocoa对象)
    OC中的数组同C语言中的数组非常接近,常见的用法首先是创建数组,然后对数组进行操作。

  • OC中数组分为不可变数组(NSArray)和可变数组(NSMutableArray) ,且只能存储Object-C对象。

  • NSArray在初始化的同时一般需要指定它所包含的元素,以nil作为结束标志,初始化中不能包含空对象;

  • NSArray是不可变数组,数组存放的对象个数和每个对象都不可改。

         OC数组:
         1.可变数组(NSMutableArray),不可变数组(NSArray2.数组的元素只能是对象类型
         3.nil作为一个结束标示
         4.下标从0开始
         5.数组元素不一定是一个类型,NSString,NSNumber...

1.实例方法初始化

       NSArray *array1 = [[NSArray alloc] initWithObjects:@"2",@"3",@5, nil];
       NSArray *array2 = [[NSArray alloc] initWithArray:array1];
       NSLog(@"array1 = %@,array2 = %@",array1,array2);

2.便利初始化方法

        NSArray *array3 = [NSArray arrayWithObjects:@"5",@7,@"abc", nil];
        NSLog(@"array3 = %@",array3);

        NSArray *array4 = [NSArray arrayWithArray:array3];

3.简化操作

注意:
简化适合不可变数组,不推荐可变数组使用。 想得到可变版本的话,可以对其发送-mutableCopy消息以生成一份可变的拷贝。
示例:NSMutableArray *array = [@[@”hello”,@”rimi”] mutableCopy];

另外,对于标记为static的数组,不能使用简写为其赋值。

        NSArray *array5 = @[@"1",@"2",@"3"];
        NSLog(@"array5 = %@",array5);

4.获取数组元素个数

    NSInteger count = array5.count;
       NSInteger count1 = [array5 count];
       NSLog(@"%ld",count);
   数组的运算:

1.添加元素

        NSArray *array1 = @[@"1",@"2",@"3"];
        NSArray *addArray = [array1 arrayByAddingObject:@"4"];
        NSLog(@"addArray = %@",addArray);

        NSArray *addArray2 = [array1 arrayByAddingObjectsFromArray:array1];
        NSLog(@"addArray2 = %@",addArray2);

2.查找元素

        NSArray *array1 = @[@"1",@"2",@"3"];
        NSInteger index = [array1 indexOfObject:@"3"];
        NSLog(@"index = %ld",index);

3.获取元素

       NSString *string1 = array1[2];
        NSLog(@"string1 = %@",string1);

        NSString *string2 = [array1  objectAtIndex:0];
        NSLog(@"string2 = %@",string2);

        //获取第一个

        NSLog(@"%@",[array1 firstObject]);

        //获取最后一个
        NSLog(@"%@",[array1 lastObject]);

        //获取部分元素
        NSArray *subArray = [array1 subarrayWithRange:NSMakeRange(0, 2)];
        NSLog(@"subArray = %@",subArray);

4.数组的排序

        NSArray *sortArray = [NSArray arrayWithObjects:@"1",@"7",@"4", nil];
        NSArray *sortArray = @[@"3",@"7",@"5",@"33"];
        //@selector方法选择器
       NSArray *newSortArray = [sortArray sortedArrayUsingSelector:@selector(compare:)];
        NSLog(@"sortArray = %@",newSortArray);

        /*
         NSOrderedAscending = -1L, NSOrderedSame, NSOrderedDescending
         */
     NSArray *newSor = [sortArray sortedArrayUsingComparator:^NSComparisonResult(id  __nonnull obj1, id  __nonnull obj2) {
           NSInteger a = [obj1 integerValue];
           NSInteger b = [obj2 integerValue];
            if (a == b) {
                return 0;
            }else if (a > b){
                return NSOrderedAscending;
            }else{
                return 1;
            }
        }];

        NSLog(@"newsort = %@",newSor);

数组的遍历

 NSArray *sortArray = @[@"3",@"7",@"5",@"33"];

        //for循环
        for (int i = 0; i < sortArray.count ; i ++) {

            NSLog(@"sort = %@",[sortArray objectAtIndex:i]);
        }

        //快速枚举
        for (id object in sortArray) {
            NSLog(@"object = %@",object);
        }

//如果遍历的数组是可变类型,一定不要在循环体中进行添加或移除操作,一般先记录对象,循环结束后再整体添加或删除。

NSMutableArray

可变数组NSMutableArray,继承自NSArray,拥有父类的。

NSMutableArray的方法,直接对数组自身进行操作,没有返回值。

 //初始化
        NSMutableArray *mutableArray = [[NSMutableArray alloc] initWithObjects:@"3",@5,@"7", nil];

        NSMutableArray *mutableArr2 = [NSMutableArray arrayWithObjects:@"4",@"5", nil];

        NSMutableArray *mutableArr3 = [NSMutableArray arrayWithCapacity:20];


        //增

        [mutableArr2 addObject:@"8"];
        NSLog(@"mutable2 = %@",mutableArr2);

        //删
        [mutableArr2 removeObject:@"8"];

        //查

       NSInteger index1 = [mutableArr2 indexOfObject:@"4"];
        NSLog(@"index  = %ld",index1);

        //改(替换)

        [mutableArr2 replaceObjectAtIndex:0 withObject:@"7"];
        NSLog(@"mutable2 = %@",mutableArr2);

        //排序
        [mutableArr2 sortUsingSelector:@selector(compare:)];
        NSLog(@"sort = %@",mutableArr2);
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值