NSArray,NSMutableArray的用法
2015-12-01 17:14
441 查看
数组是OC提供的一个有序的容器,里面必须放的是对象类型数据
NSArray 不可变数组
1.创建数组
(1)字面量的方法创建:字面量创建和便利构造器创建方式一样
2.字符串截取成数组:compentsSeparatedByString
(1)for循环
1)
NSMutableArray 可变数组
在数组的最后一位
removeAllObjects];
5.替换指定位置的对象,位置在前,添加的对象在后
NSArray 不可变数组
1.创建数组
(1)字面量的方法创建:字面量创建和便利构造器创建方式一样
NSArray *arr = @[@"1", @"2", @"3", @"4", @"5"];(2)alloc和自定义初始化的方法创建
NSArray * arr1 = [[NSArray alloc] initWithObjects:@"avc", @"2", @"3", nil];
NSLog(@"%@", arr1); // 打印数组对象,直接打印出全部结果,但是汉字打印出来是汉字的编码
NSLog(@"%ld", arr. count); // 求数组的长度 NSLog(@"%@", [arr objectAtIndex:2]); // 获取数组中的一个对象,可以用语法糖arr[i]来获取
2.字符串截取成数组:compentsSeparatedByString
NSString *str = @"www.lanou3g.com";
NSArray *arr = [str componentsSeparatedByString:@"."]; NSLog(@"%@", arr);3.数组内容拼接成字符串:用字符串拼接方法appendFormat
NSArray *arr = @[@"北京", @"大连", @"河南", @"青岛"]; NSMutableString *str1 = [NSMutableString string]; for (NSInteger i = 0; i < arr.count; i++) { [str1 appendFormat:@"%@:",[arr objectAtIndex:i]]; }
NSLog(@"%@", str1);4.数组的遍历方法
(1)for循环
for (NSInteger i = 0; i < arr.count; i++) { NSLog(@"%@", [arr1 objectAtIndex:i]); }(2)数组的快速枚举:for..in,in前面写元素的类型,in后面写需要遍历哪个容器
1)
NSArray *arr = @[@"张三", @"李四", @"王五", @"田七"]; for (NSString *temp in arr) { NSLog(@"%@", temp);
}2)数组套数组:for.. in的两层嵌套,和数组的元素无关,直到没有元素了循环结束
NSArray *arr1 = @[@"张三", @"李四", @"王五"];
NSArray *arr2 = @[@"王斌", @"黄超"]; NSArray *arr3 = @[@"马云", @"唐末", @"明初"]; NSArray *arr = @[arr1, arr2, arr3]; for (NSArray *temp in arr) { for (NSString *str in temp) { <span style="white-space:pre"> </span>NSLog(@"%@", str); } }3).系统自带的遍历方法:block是块语法,看到他直接回车就可以,然后在code区写操作,通过block的方式来访问数组的元素,obj就是对应的元素对象,他默认的类型是id,可以换成其他类型
[arr1 enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { NSLog(@"%@", obj); }];4).枚举器:枚举器的用法
NSEnumerator*enumerator= [myArrayobjectEnumerator];
idanObject;
while(anObject= [enumeratornextObject]){
/* code to act on each element as it is returned */
}
<span style="font-size: 0.85em;"> </span>NSEnumerator *enumer = [arr1 objectEnumerator];
NSString *str; // 判断条件是:下个元素是空的,返回一个空地址,循环结束 while (str = [enumer nextObject]) { NSLog(@"%@", str); } NSEnumerator *enumerator = [arr objectEnumerator]; // 指针类型和数组里元素类型相同 Student *stu; // Student类型的对象 While (stu = [enumerator nextObject]) { NSLog(@"%@", stu.stuName); }5.判断一个对象是否在数组中
<span style="font-size: 0.85em;"> </span>NSArray *arr1 = @[@"张三", @"李四", @"王五"]; // 判断一个对象是否在数组中 BOOL result = [arr1 containsObject:@"张三"]; NSLog(@"%d", result);
NSMutableArray 可变数组
1.创建一个数组
// 创建一个空数组 NSMutableArray *arr = [[NSMutableArray alloc] init]; // 用便利构造器创建一个空数组 NSMutableArray *arr1 = [NSMutableArray array]; // 创建一个有初值的数组 NSMutableArray *arr = [NSMutableArray arrayWithObjects:@"1", @"2", nil]; // 不可变数组转换成可变数组 NSMutableArray *arr = [NSMutableArray arrayWithArray:@[@"4", @"4", @"5"]]; NSLog(@"%@", arr);2.可变数组增加对象:添加的元素
[arr removeAllObjects];
在数组的最后一位
[arr addObject:@"apple"]; NSLog(@"%@", arr); [arr addObject:@"pear"]; NSLog(@"%@", arr);3.在指定位置插入一个对象
[arr insertObject:@"banana" atIndex:0];
NSLog(@"%@", arr);4.移除数组中的对象
// 移除最后一个对象
[arr removeLastObject]; NSLog(@"%@", arr);
// 移除指定位置的对象
[arr removeObjectAtIndex:1]; NSLog(@"%@", arr);<pre name="code" class="objc">// 清空数组里所有元素
<pre name="code" class="objc">// 移除一个范围内的对象 [arr1 removeObjectsInRange:NSMakeRange(0, 1)];[arr
removeAllObjects];
5.替换指定位置的对象,位置在前,添加的对象在后
[arr replaceObjectAtIndex:0 withObject:@"grape"]; NSLog(@"%@", arr);6.交换数组里两个指定位置上的对象
[arr exchangeObjectAtIndex:0 withObjectAtIndex:1];练习:定义一个数组完成一下操作:1.向数组中添加三个名字2.从数组中查找指定的名字,并且替换3.删除指定名字
NSLog(@"%@", arr);
NSMutableArray *arr = [NSMutableArray array]; [arr addObject:@"apple"]; [arr addObject:@"banana"]; [arr addObject:@"pear"]; for (NSInteger i = 0; i < arr.count; i++ ) { if ([[arr objectAtIndex:i] isEqualToString:@"apple"]) { [arr replaceObjectAtIndex:i withObject:@"grape"]; } NSLog(@"%@", arr[i]); } [arr removeObject:@"pear"]; NSLog(@"%@", arr);<span style="font-size:18px;"> </span>获取文件的路径:拖拽的形式就可以,找到文件中省,区,市
// NSString *path = @"/Users/dllo/Desktop/oc5-数组/oc5-数组/area.txt";OC中数组的排序
// NSString *str = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
// NSArray *arr = [str componentsSeparatedByString:@"\n"];
// NSMutableArray *provinceArr = [NSMutableArray array];
// NSMutableArray *cityArr = [NSMutableArray array];
// NSMutableArray *zoneArr = [NSMutableArray array];
// for (NSString *temp in arr) {
// if (![temp hasPrefix:@" "]) { // 通过空格数来判断省,区,市
// [provinceArr addObject:temp];
// } else if ([temp hasPrefix:@" "] && ![temp hasPrefix:@" "]){
// [cityArr addObject:temp];
// } else if([temp hasPrefix:@" "]){
// [zoneArr addObject:temp];
// }// }// for (NSString *temp in provinceArr) {
// NSLog(@"%@", temp);
// }// for (NSString *temp in cityArr) {
// NSLog(@"%@", temp);
// }// for (NSString *temp in zoneArr) {
// NSLog(@"%@", temp);
// }
1.对不可变数组的排序:(1)对不可变的数组进行排序,不会对原有数组进行修改,而是会产生一个新数组 (2)sortedArrayUsingSelector需要指定一个排序方法,这个指定方法的过程通过方法选择器来实现
(3)方法选择器的类型是SEL,可以用@selector()来实现
// NSArray *nameArr = @[@"zhangyang", @"huangchao", @"yindejian", @"hean", @"baipeihe", @"cuilin"];2.对可变数组的排序:sortUsingSelector
[newArr sortUsingSelector:@selector(compare:)]; NSLog(@"%@", newArr);
// NSMutableArray *newArr = [NSMutableArray arrayWithArray:nameArr]; // NSMutableArray *arr2 = [NSMutableArray arrayWithObjects:nameArr, nil]; // NSLog(@"%ld", newArr.count); // 结果是6 // NSLog(@"%ld", arr2.count); // 结果是2,这个元素是nameArr数组两种方法元素元素的个数不同
相关文章推荐
- 信用卡
- Calico在Docker中的搭建
- Flume-NG 日志文件收集 简单实例
- tomcat启动多实例
- git 操作
- 去掉tableView多余的线
- Java计算图形面积周长(4)
- 正则表达式之旅_sed_awk
- JavaWeb学习总结
- 【iOS】stringWithFormat 保留小数点位数 float double
- 新加入“扫码阅读”功能
- 已知服务网址,根据wsdl生成dll供本地调用
- 挨踢人的脚步(2015.12.1)
- Android详细的对话框AlertDialog.Builder使用方法
- Zxing框架扫描框大小适配问题
- Eclipse快捷键 10个最有用的快捷键
- texrfiled 键盘类型
- clonezilla克隆系统并使用Tuxboot-0.8.3.exe制作启动盘
- Linux在线用户通信
- totoise svn和kdiff的配置