OC第四节NSArray,NSMutableArray,NSNumber总结

本文详细介绍了Objective-C中的NSArray和NSMutableArray,包括如何创建、获取元素个数、遍历、排序以及操作可变数组。同时讲解了NSNumber的使用,如何进行数据类型转换,并分析了数组操作中的常见错误及其解决办法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一 数组的价值:
1 存储多个元素 
2 存储的元素只能是对象, 对象可以是不同类型的 
3 数组是一个有序的集合 
4 数组中的元素可以重复, 而且重复的对象会成为数组元素
二 创建数组
1 通过便利构造器创建数组
NSArray *arr1 = [NSArray arrayWithObjects:str1, str2, str3, str4, str5, str6, nil];
arrayWithObjects 创建对象时可以指定多个对象元素, 元素与元素之间通过逗号间隔
nil 作为数组元素存放的结束标志, 遇到nil之后, 之后的元素都不会放在数组中
2 通过初始化方法创建数组
        NSArray *arr2 = [[NSArray alloc] initWithObjects:str1, str2, str3, str4, str5, str6, nil];
三 获取元素个数
        NSUInteger count = [arr1 count];
四 
通过下边获取数组元素
NSLog(@"%@", [arr2 objectAtIndex:0]);
获取最后一个元素
        NSLog(@"%@", [arr1 lastObject]);
 通过给定元素获取数组中的下标
        NSLog(@"%lu", [arr2 indexOfObject:str4]);
判断是否包含给定元素
        BOOL isExist = [arr1 containsObject:str5];
        NSLog(@"isExist = %hhd", isExist);
五
数组排序
        NSArray *sortArr = [arr2 sortedArrayUsingSelector:@selector(compare:)];
        NSLog(@"%@", sortArr);
六 快速遍历(快速枚举)
for (NSString *str in arr2) {
            NSLog(@"%@", str);
        }
forin快速枚举(快速遍历)用于将集合中的元素取出, 遍历出来type *object: type *数组中元素的类型, object是给对象起一个名字 , collection: 集合(也就是大容器, 数组, 字典, 集合)
可变数组
添加
[arr addObject:book4];
删除
[arr removeObject:book1];
查找
        for (Book *book in arr) {
            //获取到数组中的元素, 然后对比名字, 如果相同就输出名字
            if ([[book name] isEqualToString:@"iOS高级编程"]) {
                [book setPrice:1000];
                NSLog(@"查找成功, name:%@, price:%.2f", [book name], [book price]);
            }
        }
输出书籍清单(书名)
        NSLog(@"%.2f", [book3 price]);
        for (Book *book in arr) {
            NSLog(@"%@", book);
        }

//重写从父类继承过来的description方法
//当打印该类的对象时, 系统会自动调用该方法
- (NSString *)description
{
    //%g可以忽略掉无用的0
    return [NSString stringWithFormat:@"name:%@, author:%@, price:%g", _name, _author, _price];
}
数据类型转换
//1 定义基本数据类型变量
        char a = 'f';
        int b = 103;
        short c = 100;
        long d = 1000;
        float f = 10.23;
        double e = 100.22222;
        BOOL isTrue = YES;
        //2 将基本数据类型转为NSNumber类型的对象
        NSNumber *a1 = [NSNumber numberWithChar:a];
        NSNumber *b1 = [NSNumber numberWithInt:b];
        NSNumber *c1 = [NSNumber numberWithShort:c];
        NSNumber *d1 = [NSNumber numberWithLong:d];
        NSNumber *f1 = [NSNumber numberWithFloat:f];
        NSNumber *e1 = [NSNumber numberWithDouble:e];
        NSNumber *isTrue1 = [NSNumber numberWithBool:isTrue];
        NSArray *arr = [NSArray arrayWithObjects:a1, b1, c1, d1, f1, e1, isTrue1, nil];
        NSLog(@"%@", arr);
        NSLog(@"%@, %@, %@, %@, %@, %@, %@", a1, b1, c1, d1, f1, e1, isTrue1);
        //3 将NSNumber类型的对象转为基本数据类型
        char a2 = [a1 charValue];
        NSLog(@"%c", a2);
        int b2 = [b1 intValue];
        NSLog(@"%d", b2);
        //4 NSNumber类型的对象比较
        NSLog(@"%ld", [a1 compare:b1]);
数组中的常见错误:was mutated while being enumerated.
遇到这类错误的时候,是同时对同一个数组进行了操作
解决方案:在对数组内容进行改变的时候,使用备份数组
下面一个简单的出现这类错误的用法:  
  
    NSMutableArray * arrayTemp = xxx;     
  
    for (NSDictionary * dic in arrayTemp) {          
  
        if (condition){              
            [arrayTemp removeObject:dic];  
        }         
    }  
应该改为:  
  
    NSMutableArray * arrayTemp = xxx;   
  
    NSArray * array = [NSArray arrayWithArray: arrayTemp];    
  
    for (NSDictionary * dic in array) {          
  
        if (condition){              
            [arrayTemp removeObject:dic];  
        }         
    }  

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值