您的位置:首页 > 其它

NSArray,NSMutableArray的用法

2015-12-01 17:14 441 查看
数组是OC提供的一个有序的容器,里面必须放的是对象类型数据

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];
NSLog(@"%@", arr);
练习:定义一个数组完成一下操作:1.向数组中添加三个名字2.从数组中查找指定的名字,并且替换3.删除指定名字

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";
// 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);
// }
OC中数组的排序

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数组
两种方法元素元素的个数不同
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: