1 不可变数组
1.1 创建不可变数组
// 使用字面量的方式创建(常用的方法)
NSArray *arr1 = @[@"1",@"2",@"3",@"4"];
// 使用 alloc 和 自定义初始化方式来创建
NSArray *arr2 = [[NSArray alloc] initWithObjects:@"1",@"2",@"3",@"4", nil];
// 输出
NSLog(@"arr1 : %@",arr1);
NSLog(@"arr2 : %@",arr2);
1.2 将数组拼接成字符串
NSArray *arr3 = @[@"北京",@"大连",@"大庆",@"山东"];
NSString *str1 = [arr3 componentsJoinedByString:@":"];
NSLog(@"str1 : %@",str1); //输出结果 北京:大连:大庆:山东
1.3 字符串截取为数组
NSString *str2 = @"www.baidu.com";
NSArray *arr4 = [str2 componentsSeparatedByString:@"."];
NSLog(@"arr4 : %@",arr4);
1.4 数组的快速遍历(快速枚举)
// 将arr1数组中的所有的元素输出
for (NSString *temp in arr1) {
NSLog(@"arr1 : %@",temp);
}
1.5 判读一个对象是否在数组中
// 分别判读字符串"0"和字符串"1"是否在数组arr1中
BOOL result = [arr1 containsObject:@"0"];
NSLog(@"result1 : %d",result);
result = [arr1 containsObject:@"1"];
NSLog(@"result2 : %d",result);
1.6 数组作为另一个数组的元素
// 创建数组arr5,将数组arr1和数组arr2作为数组arr5的一个元素
NSArray *arr5 = [NSArray arrayWithObjects:arr1,arr2, nil];
NSLog(@"%@",arr5);
// 输出arr5的长度 结果是2
NSLog(@"%ld",arr5.count);
2 可变数组
2.1创建可变数组
// 使用便利构造器
NSMutableArray *arr1 = [NSMutableArray array];
// 使用alloc和init
NSMutableArray *arr2 = [[NSMutableArray alloc] init];
2.2 添加元素
// 向arr1中添加三个元素
[arr1 addObject:@"张三"];
[arr1 addObject:@"李四"];
[arr1 addObject:@"王五"];
2.3 插入元素
//在1的位置插入"田七"
[arr1 insertObject:@"田七" atIndex:1];
2.4 移除元素
// 移除最后一个元素
[arr1 removeLastObject];
// 移除"田七"(按元素内容移除)
[arr1 removeObject:@"田七"];
2.5 替换
// 将1位置上的元素替换为"田七"
[arr1 replaceObjectAtIndex:1 withObject:@"田七"];
2.6 交换
// 交换位置0和位置1上的元素
[arr1 exchangeObjectAtIndex:0 withObjectAtIndex:1];
2.7 清空数组
[arr1 removeAllObjects];
2.8可变数组和不可变数组的转换
// 向arr1中添加三个元素
[arr1 addObject:@"张三"];
[arr1 addObject:@"李四"];
[arr1 addObject:@"王五"];
// 将arr1中的所有元素添加到一个不可变数组中
NSArray *arr3 = [NSArray arrayWithArray:arr1];
// 将不可变数组的元素添加到可变数组arr4中
NSMutableArray *arr4 = [NSMutableArray arrayWithArray:arr3];
3 四种遍历方式和数组排序
常用的还是第一和第二中遍历方式
// 新建一个数组
NSArray *arr = [NSArray arrayWithObjects:@"5",@"4",@"6", nil];
3.1 第三种遍历方式
// 这是通过block的方式来访问数组里的元素,obj就是对于的元素对象,它的默认类型是id,可以修改为其他的类型
[arr enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
NSLog(@"%@",obj);
}];
3.2 第四种遍历方式
<span style="font-weight: normal;">// 这是使用枚举器来完成遍历
NSEnumerator *enumer = [arr objectEnumerator];
NSString *temp;
while (temp = [enumer nextObject]) {
NSLog(@"%@",temp);
}</span>
3.3 第一种遍历方式
<span style="font-weight: normal;">// 这是使用枚举器来完成遍历
NSEnumerator *enumer = [arr objectEnumerator];
NSString *temp;
while (temp = [enumer nextObject]) {
NSLog(@"%@",temp);
}</span>
<span style="font-weight: normal;">// for循环
for(int i = 0; i < arr.count; i++){
NSLog(@"%@",arr[i]);
}</span>
3.4 第二种便利方式
<span style="font-weight: normal;">// for循环
for(int i = 0; i < arr.count; i++){
NSLog(@"%@",arr[i]);
}</span>
<span style="font-weight: normal;">// for in 循环
for (NSString *temp in arr) {
NSLog(@"%@",temp);
}</span>
<span style="font-weight: normal;">// for in 循环
for (NSString *temp in arr) {
NSLog(@"%@",temp);
}</span>
3.5 数组排序
// 对不可变数组排序,返回一个排序后的数组,原数组不发生改变
NSArray *newArr = [arr sortedArrayUsingSelector:@selector(compare:)];
// 输出排序后的数组
NSLog(@"%@",newArr);
// 对可变数组的排序
NSMutableArray *arr2 = [NSMutableArray arrayWithObjects:@"6",@"5",@"8", nil];
[arr2 sortedArrayUsingSelector:@selector(compare:)];
// 输出arr2数组
NSLog(@"%@",arr2);
4 小程序
// 数组中添加三个名字// 查找指定的名字,并用另外的名字替换他
// 删除指定的名字
// 新建可变数组
NSMutableArray *arr = [NSMutableArray array];
// 添加三个姓名
[arr addObject:@"张三"];
[arr addObject:@"李四"];
[arr addObject:@"王五"];
// 查找"李四"
NSString *searchName = @"李四";
NSString *replaceName = @"田七";
NSString *deleteName = @"王五";
NSInteger location = -1;
for(int i = 0; i < arr.count; i++){
if([arr[i] isEqualToString:searchName]){
location = i;
NSLog(@"找了%@,存储位置在%ld",searchName,location);
}
}
if(-1 == location){
NSLog(@"没有找到%@",searchName);
}
// 用replaceName替换searchName
else{
[arr replaceObjectAtIndex:location withObject:replaceName];
NSLog(@"替换完成!用%@替换了%@",replaceName,searchName);
}
// 删除指定的名字
[arr removeObject:deleteName];
NSLog(@"删除了%@",deleteName);
// 输出数组arr的所有元素
for (NSString *temp in arr) {
NSLog(@"%@",temp);
}