C里面的数组,元素类型是相同的;OC里面的数组,元素的类型可以是多种混杂,并且可以是对象。
一、不可变数组
1.数组的遍历
①for循环
NSArray * array = [[NSArray alloc] initWithObjects:@"a",@"b",@"c",@"d", nil];
for (int i = 0; i < [array count]; i++) {
NSString * str = array[i];
NSLog(@"for循环遍历数组 = %@",str);
}
②for…in…循环
NSArray * array = [[NSArray alloc] initWithObjects:@"a",@"b",@"c",@"d", nil];
for (NSString * str in array) {
NSLog(@"for…in循环遍历数组 = %@",str);
}
③基于block进行遍历
1)正序遍历
NSArray * array = [[NSArray alloc] initWithObjects:@"a",@"b",@"c",@"d", nil];
[array enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
NSString * str = array[idx];
NSLog(@"block正序循环遍历数组 = %@",str);
}];
2)倒序遍历
NSArray * array = [[NSArray alloc] initWithObjects:@"a",@"b",@"c",@"d", nil];
[array enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
NSString * str = array[idx];
NSLog(@"block倒序循环遍历数组 = %@",str);
}];
④枚举遍历(id表示任意对象)
NSEnumerator *enumerator = [array objectEnumerator];
id obj;
int i = 0;
while (obj = [enumerator nextObject]) {
i++;
NSString * str = array[i];
NSLog(@"枚举遍历数组 = %@",str);
}
2.数组的创建
①字面量语法
NSArray * array = @[@"hello",@"like",@"love"];
②实例化方法
NSArray * array = [[NSArray alloc] initWithObjects:@"hello",@"like",@"love",nil];
③类方法
NSArray * array = [NSArray arrayWithObjects:@"hello",@"like",@"love",nil];
3.获取数组元素个数
NSArray * array = [NSArray arrayWithObjects:@"hello",@"like",@"love",nil];
NSLog(@"%lu",[array count]);
4.通过索引获取相应的元素(索引下标从0开始计数)
NSArray * array = [NSArray arrayWithObjects:@"hello",@"like",@"love",nil];
NSString * str1 = [array objectAtIndex:2];
NSString * str2 = array[2];
NSLog(@"str1 = %@,str2 = %@",str1,str2);
5.通过对象地址获取在数组中的索引
NSArray * array = [NSArray arrayWithObjects:@"hello",@"like",@"love",nil];
NSUInteger index = [arrayGod indexOfObject:@"love"];
NSLog(@"love在数组中的位置是",index);
6.判断数组中数组包含元素anObject
NSArray * array = @[@"hello",@"like",@"love",@"world"];
BOOL tag = [array containsObject:@"like"];
NSLog(@"如果是1则包含,如果是0则不包含:%d",tag);
7.获取数组的最后一个元素/第一个元素
NSArray * array = @[@"hello",@"like",@"love",@"world"];
NSString * firstObj = [array firstObject];
NSString * lastObj = [array lastObject];
NSLog(@"第一个元素是:%@ 最后一个元素是:%@",firstObj,lastObj);
8.把数组元素内容按照字符串separator进行拼接
NSArray * array = @[@"hello",@"like",@"love",@"world"];
//以后用在给服务器传数据
NSString * joinStr = [array componentsJoinedByString:@"iOS "];
NSLog(@"拼接后的字符串%@",joinStr);
9.字符串分割
NSString * str = @"My+name-is*God/";
NSCharacterSet * charSet = [NSCharacterSet characterSetWithCharactersInString:@"+-*/n"];
NSArray * arrayStr = [str componentsSeparatedByCharactersInSet:charSet];
NSLog(@"字符串进行分割后的数组为%@",arrayStr);
二、可变数组
1.创建可变数组
①实例方法
NSMutableArray * mutableArray = [[NSMutableArray alloc] initWithObjects:@"a",@"b",@"c",@"d", nil];
②用一个数组初始化一个可变数组
NSArray * arr = @[@"new",@"old"];
NSMutableArray * mutalbeArray = [[NSMutableArray alloc] initWithArray:arr];
③类方法
NSArray * arr = @[@"new",@"old"];
NSMutableArray * mutalbeArray = [NSMutableArray arrayWithArray:arr];
2.增加数组元素
①末尾追加元素
NSMutableArray * mutableArray = [[NSMutableArray alloc] initWithObjects:@"a",@"b",@"c",@"d", nil];
[mutableArray addObject:@"e"];
②根据索引插入元素,index后的元素依次往后移一位
NSMutableArray * mutableArray = [[NSMutableArray alloc] initWithObjects:@"a",@"b",@"c",@"d", nil];
[mutableArray insertObject:@"z" atIndex:3];
③追加一个数组
NSMutableArray * mutableArray = [[NSMutableArray alloc] initWithObjects:@"a",@"b",@"c",@"d", nil];
NSArray * arr = @[@"new",@"old"];
[mutableArray addObjectsFromArray:arr];
3.删除元素
①删除最后一个元素
NSMutableArray * mutableArray = [[NSMutableArray alloc] initWithObjects:@"a",@"b",@"c",@"d", nil];
[mutableArray removeLastObject];
②删除指定坐标的元素
NSMutableArray * mutableArray = [[NSMutableArray alloc] initWithObjects:@"a",@"b",@"c",@"d", nil];
[mutableArray removeObjectAtIndex:3];
③删除所有元素 清空数组
NSMutableArray * mutableArray = [[NSMutableArray alloc] initWithObjects:@"a",@"b",@"c",@"d", nil];
[mutableArray removeAllObjects];
④在一定范围删除指定的元素,在此范围内 如果存在这个元素,则删除,否则不作处理
NSMutableArray * mutableArray = [[NSMutableArray alloc] initWithObjects:@"a",@"b",@"c",@"d", nil];
NSRange range = {0,3};
[mutableArray removeObject:@"1" inRange:range];
⑤删除指定的元素
NSMutableArray * mutableArray = [[NSMutableArray alloc] initWithObjects:@"a",@"b",@"c",@"d", nil];
[mutableArray removeObject:@"e"];
⑥根据一个数组删除指定的元素,arr(参数),里面有什么 ,在array 中都需要删除
NSMutableArray * mutableArray = [[NSMutableArray alloc] initWithObjects:@"a",@"b",@"c",@"d", nil];
NSArray * arr = @[@"new",@"old",@"d"];
[mutableArray removeObjectsInArray:arr];
4.修改数组
①重新赋值
NSMutableArray * mutableArray = [[NSMutableArray alloc] initWithObjects:@"a",@"b",@"c",@"d", nil];
NSArray * arr = @[@"new",@"old"];
[mutableArray setArray:arr];
②替换指定索引的元素
NSMutableArray * mutableArray = [[NSMutableArray alloc] initWithObjects:@"a",@"b",@"c",@"d", nil];
[mutableArray replaceObjectAtIndex:2 withObject:@"cc"];
③交换数组元素
NSMutableArray * mutableArray = [[NSMutableArray alloc] initWithObjects:@"a",@"b",@"c",@"d", nil];
[array exchangeObjectAtIndex:1 withObjectAtIndex:2];
5.数组排序:仅介绍两种常见算法
①选择排序法
NSArray * arrayNum = @[@"1",@"4",@"6",@"5",@"2",@"3"];
NSMutableArray * arraySort = [[NSMutableArray alloc] initWithArray:arrayNum];
for (int i = 0; i < [arraySort count] - 1; i++) {
for (int j = i + 1; j < [arraySort count]; j++) {
NSString * str1 = [arraySort objectAtIndex:i];
NSString * str2 = arraySort[j];
int num1 = [str1 intValue];
int num2 = [str2 intValue];
if (num1 > num2) {
//交换
[arraySort exchangeObjectAtIndex:i withObjectAtIndex:j];
}
}
}
②冒泡排序法
NSMutableArray * arrayStr = [[NSMutableArray alloc] initWithObjects:@"HanMeiMei",@"LiLei",@"Lucy",@"Lili",@"Mike",@"Alex", nil];
for (int i = 0; i < [arrayStr count] - 1; i++) {
for (int j = 0; j < [arrayStr count] - i - 1; j++) {
NSString * str1 = [arrayStr objectAtIndex:j];
NSString * str2 = arrayStr[j+1];
if ([str1 compare:str2] == NSOrderedDescending) {
[arrayStr exchangeObjectAtIndex:j withObjectAtIndex:j+1];
}
}
}