一 数组的价值:
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];
}
}