本文共 6252 字,大约阅读时间需要 20 分钟。
数组-有序集合
IOS中存放数据的容器类都称为集合(collection) 数组是有序结合 只能存放对象 数组有下标(index)的概念,靠index来索引元素,下标从0开始 数组分不可变数组(NSArray)和可变数组(NSMutableArray) @[@"abc",@"erf"] 这个语法糖返回的是不可变数组 不可变数组里的元素只可以读取,不可以写入涉及知识点:
1、数组的初始化,建议使用语法糖
2、取数组中元素个数方法 Count 返回值为无符号长整型 3、访问数组中元素:str = [arr objectAtIndex:2],类似于str = arr[2]; 4、可变数组元素的初始化: 实例方法: initWithObjects: 类方法: arrayWithObjects: 5、可变数组中添加元素:addObject: 6、可变数组中指定位置插入元素:insertObject:@"bobo" atIndex:0 7、可变数组中删除元素:removeObject: 8、可变数组中替换元素:replaceObjectAtIndex:1 withObject:@"kevin" 9、可变数组中交换两个元素的位置:exchangeObjectAtIndex:0 withObjectAtIndex:1 10、数组元素遍历的两种方法 11、把基本类型转换为对象类型 numberWith开头,如: numberWithBool; numberWithFloat; numberWithInt; numberWithChar; ... 12、对象类型转换成基本数据类型 boolValue; intValue; floatValue; doubleValue; rangeValue; ...· 13、NSNumber 语法糖 NSNumber * num5 = [NSNumber numberWithInt:8]; NSNumber * num6 = @8; //将int类型转换成NSNumber对象 NSNumber * num7 = @2.3; //将double类型转换成NSNumber对象 NSNumber * num8 = @YES; //将BOOL类型转换成NSNumber对象 NSNumber * num9 = @'c'; //将char类型转换成NSNumber对象 14、结构体转换成对象类型: NSValue * value = [NSValue valueWithRange:range] 15、对象类型转换为结构体类型 NSRange range2 = [value rangeValue]; NSLog(@"range2 = %@",NSStringFromRange(range2)); 16、字符串以某个字符分隔开,然后存储到数组中 NSString *str5 = @"abc,def,ghi"; NSArray *arr5 = [str5 componentsSeparatedByString:@","]; 17、数组转换为字符串(拼接): str5 = [arr5 componentsJoinedByString:@"."]; 18、删除数组中的元素: 删除数组中的一个元素: removeObjects: 删除数组中多个元素,删除的多个元素在另一个数组里: removeObjectsInArray: NSArray * delArr = @[p4,p5,p6]; [mArr5 removeObjectsInArray:delArr];main.m
#import#import "Person.h"int main(int argc, const char * argv[]) { //-----1.1--初始化方法创建数组----- // nil相当于\0的作用,表示访问到这里就结束了,不再访问后面的数组元素 NSArray * arr = [[NSArray alloc]initWithObjects:@"zero",@"hour",@"学辉", nil]; NSLog(@"%@",arr); NSArray * arr2 = @[@"Frank",@"bobo",@"Duke"]; NSLog(@"%@",arr2); NSArray * arr3 = [NSArray arrayWithObjects:@"张三",@"李四",@"王五", nil]; NSLog(@"%@",arr3); //不常用的方法: NSArray * arr4 = [NSArray arrayWithObject:@"tom"]; NSLog(@"%@",arr4); //-----1.2-- 获取数组元素个数的方法:------- NSUInteger arrCount = [arr2 count]; //int count = (int)[arr2 count]; //错误写法,这样会损失精度 NSLog(@"%lu",arrCount); //-----1.3--访问数组元素,arr[2]等价于下面的代码------- // 获取对应索引的元素 NSString *str = [arr objectAtIndex:2]; NSLog(@"%@",arr[2]);//不安全 NSLog(@"%@",str); //-----2.1--可变元素的初始化------- NSMutableArray *mArr = [[NSMutableArray alloc]initWithObjects:@"zero",@"hour", nil]; NSLog(@"%@",mArr); //-----2.2--可变数组中元素的添加------- //可以接受自己所有特有的消息,添加数组元素(特有的方法) [mArr addObject:@"bobo"]; NSLog(@"%@",mArr); //在数组mArr的第0个位置添加@"bobo"元素。 [mArr insertObject:@"bobo" atIndex:0]; NSLog(@"%@",mArr); //-----2.3--删除数组元素(由于后面的代码会用到mArr,这里先注释起来)-------// [mArr removeObject:mArr[0]];// [mArr removeObject:@"bobo"];// NSLog(@"%@",mArr); //-----2.4--替换元素 这里的1是指数组的下标------- [mArr replaceObjectAtIndex:1 withObject:@"kevin"]; NSLog(@"%@",mArr); //-----2.5--交换两个元素------- [mArr exchangeObjectAtIndex:0 withObjectAtIndex:1]; NSLog(@"%@",mArr); //-----2.6--可变数组元素的输出------ NSMutableArray * names = [NSMutableArray arrayWithObjects:@"张三",@"李四",@"王五", nil]; NSLog(@"names = %@",names); //第一种遍历 for (int i=0; i<[names count]; i++) { NSLog(@"%@",names[i]); } //第二种遍历 for (NSString * obj in names) { NSLog(@"%@",obj); } //************************* //第四部分 //************************* //值对象 //-------NSNumber---- //-----3.1--把基本类型转换为对象类型-------- /* + numberWithInt: + numberWithDouble: - intValue - doubleValue */ NSNumber * num1 = [NSNumber numberWithBool:YES]; NSNumber * num2 = [NSNumber numberWithChar:'a']; NSNumber * num4 = [NSNumber numberWithFloat:3.5]; NSNumber * num3 = [NSNumber numberWithDouble:2.3]; //-----3.2--OC数组当中不能存储基本数据类型------- // NSArray *arr = @[YES,2.3,5];//这样存储是错误的,OC数组当中不能存储基本数据类型 NSArray *nArr = @[num1,num2,num3,num4]; NSLog(@"%@",nArr); //-----3.3--对象类型转换成基本数据类型------- BOOL type1 = [num1 boolValue]; char type2 = [num2 charValue]; float type3 = [num3 floatValue]; double type4 = [num4 doubleValue];// NSArray * nArr2 = @[type1,type2,type3,type4]; NSLog(@"%@",nArr); NSLog(@"%d, %c, %.2f, %.2f",type1,type2,type3,type4); //-----3.4--NSNumber的语法糖------- NSNumber * num5 = [NSNumber numberWithInt:8]; NSNumber * num6 = @8; //将int类型转换成NSNumber对象 NSNumber * num7 = @2.3; //将double类型转换成NSNumber对象 NSNumber * num8 = @YES; //将BOOL类型转换成NSNumber对象 NSNumber * num9 = @'c'; //将char类型转换成NSNumber对象 NSLog(@"num5=%@, num6=%@, num7=%@, num8=%@, num9=%@ ",num5,num6,num7,num8,num9); //-----4--NSValue------- /* + valueWithRange: + valueWithPointer: - rangeValue - pointerValue */ //-----4.1--valueWithRange 结构体转换成对象类型------- //封装结构体为对象类型 结构体类型转换为对象目的是为了放到数组里 NSRange range = NSMakeRange(1, 3); //实例化了一个结构体 初始化了一个结构体 NSValue * value = [NSValue valueWithRange:range]; //转换成对象类型 NSLog(@"%@",value); //-----4.2--rangeValue对象类型转换为结构体------- NSRange range2 = [value rangeValue]; NSLog(@"%@",NSStringFromRange(range2)); //-----4.3--componentsSeparatedByString: 字符串转换为数组--------- //将字符串中以某个字符分隔,分隔后的字符串放在数组当中 NSString *str5 = @"abc,def,ghi"; NSArray *arr5 = [str5 componentsSeparatedByString:@","]; NSLog(@"%@",arr5); //-----4.4---componentsJoinedByString: 数组转换为字符串--------- str5 = [arr5 componentsJoinedByString:@"."]; NSLog(@"%@",str5); //-----4.5--删除数组中指定素-------- Person *p1 = [[Person alloc]init]; Person *p2 = [[Person alloc]init]; Person *p3 = [[Person alloc]init]; Person *p4 = [[Person alloc]init]; Person *p5 = [[Person alloc]init]; Person *p6 = [[Person alloc]init]; //removeObject:删除可变数组中的指定元素 NSMutableArray *mArr5 = [NSMutableArray arrayWithObjects:p1,p2,p3,p4,p5,p6, nil]; [mArr5 removeObject:p2]; NSLog(@"mArr5 = %@",mArr5); for (int i=0;i<5;i++) { NSLog(@">> %@",mArr5[i]); } NSArray * delArr = @[p3,p4,p5,p6]; [mArr5 removeObject:delArr]; NSLog(@"---%@",mArr5); return 0;}
转载地址:http://coxmi.baihongyu.com/