NSArray,NSMutableArray的用法

数组是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).枚举器:枚举器的用法

  1. NSEnumerator*enumerator= [myArrayobjectEnumerator];
  2. idanObject;
  3. while(anObject= [enumeratornextObject]){
  4. /* code to act on each element as it is returned */
  5. }
  6. <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.判断一个对象是否在数组中
  7. <span style="font-size: 0.85em;"> </span>NSArray *arr1 = @[@"张三", @"李四", @"王五"];
    // 判断一个对象是否在数组中
    BOOL result = [arr1 containsObject:@"张三"];
    NSLog(@"%d", result);

    NSMutableArray 可变数组
  8. 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.在指定位置插入一个对象
  9. [arr insertObject:@"banana" atIndex:0];
    NSLog(@"%@", arr);
    
    4.移除数组中的对象
  10. // 移除最后一个对象
     [arr removeLastObject];
    NSLog(@"%@", arr);
    // 移除指定位置的对象
  11. [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.删除指定名字
  12.  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中数组的排序
  13. 1.对不可变数组的排序:(1)对不可变的数组进行排序,不会对原有数组进行修改,而是会产生一个新数组 (2)sortedArrayUsingSelector需要指定一个排序方法,这个指定方法的过程通过方法选择器来实现
  14. (3)方法选择器的类型是SEL,可以用@selector()来实现
  15. //    NSArray *nameArr = @[@"zhangyang", @"huangchao", @"yindejian", @"hean", @"baipeihe", @"cuilin"];
    2.对可变数组的排序:sortUsingSelector
  16. [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数组
    两种方法元素元素的个数不同





















  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值