Object-C之NSArry,(补充NSmutableString)

来源:互联网 发布:如何看待网络舆情 编辑:程序博客网 时间:2024/06/07 01:13

**OC中的NSArray和NSmutableString

本文将介绍在oc中关于集合(NSArry,也可称之为数组)和可变字符串(NSmutableString)的一些内容:

  • 关于NSmutableString
  • 关于NSArray
  • NSArray的创建
  • NSArray添加数据
  • NSArray获取某个数据
  • NSArray移除数据
  • NSArray数据遍历
  • NSArray数据排序
  • 关于NSArray其他操作方法

关于NSmutableString

  • 其实NSmutableString和NSString都是表示一个字符串,NSString字符串初始化以后是不能改变的,而NSmutableString定义的字符串可以更改。其方法和NSString基本操作差不多一样。
    -如appendString表示追加字符串;
    -substringFromIndex截取字符串;
    -componentsSeparatedByString分割字符串;
    -characterAtIndex根据下表取值;
    -stringByAppendingPathExtension追加一个拓展名;
    -stringByDeletingPathExtension删除一个拓展名;
    -hasPrefixhasSuffix判断前后缀;
    等等一些方法…

关于NSArray

  • 关于OC中的NSArray可以理解成数组,也可以理解成是集合,用来装一个类型数据的合集,在java中我们通常把数组和集合(List..)区分开来,其实OC中的NSArray和java中的list很像。有java基础的开发人员应该很容易能够懂。

NSArray的创建

  • arrayWithObjects方法
  • initWithContentsOfFile方法,从文件中获取数据
    这里写图片描述
    注意:
    集合中如果数据是某一自定义对象,这些对象不用自己释放,当数组销毁时会一一释放对象,由于初始化数据的时候arrayWithO ject是静态方法所以它的释放不用我们管理,系统帮我们管理。
    这里写图片描述
    说明:
    initWithContentsOfFile方法是从某个文件中获取数据,放到数组中,这个的文件数据并不是什么数据都可以,要具有一定的格式-xml格式数据,如:
    这里写图片描述
    ,所以一般文件格式为.xml格式的文件。

NSArray添加数据

  • arrayByAddingObject能够添加一个数据到数组
    这里写图片描述
    注意:
    使用这个方法添加数据得到的是 一个新的数组,不是在原来的基础上添加进去的,因为NSArray初始化完成以后就不能改变了,也可以说NSArray不支持添加操作,这里可以使用NSMutableArray(是NSArray的子类),这个和NSmutableString特性有点像,是可变的。

NSArray获取某数据

  • objectAtIndex能够添加一个数据到数组
    这里写图片描述
    当然有根据下标获取数据,那肯定就能根据数据获取其下标:
    这里写图片描述
    这个的stu是一个数组里面一个对象。

NSArray移除数据

  • NSArray没有移除数据的方法,因为NSArray初始化以后是不能改变的,个NSString一样,可以使用NSMutableArray,该类中有个方法removeObjectAtIndex:index,移除下标为index的元素。
    这里写图片描述

NSArray数据遍历

  • 用普通的for循环遍历,优点-事能够获取下标
    这里写图片描述
    和java中的for一样的,比较简单。

  • 用普通的foreach循环遍历,优点-效率相对比较高
    这里写图片描述
    这里的for结构为:for(id data in array){},
    id:表示一切对象;
    data:表示临时变量,和java中的一样;
    in:相当于java中的额 “:”,在哪里循环;
    array:表示需要遍历的数组;

  • 使用Block代码块来进行遍历
    这里写图片描述
    这方法apple是比较推荐的,效率比较高,容易控制。
    enumerateObjecyUsingBlock中有三个参数,
    id :当前的对象;
    NSUInteger:当前对象的下标;
    BOOL:表示是否停止遍历,如需要停止着*stop=false即可。(参数中的 *stop表示是一个指针,而获取指针的值就是 *stop,把指针值更改为false,停止遍历)。


NSArray数据排序

  • sortedArrayUsingSelector:@selector(compare:)默认升序
    这里写图片描述
    说明:@selector表示可以理解为一个筛选器,compare:是系统的方法,调用该方法排序会返回一个已经排好序的新数组。

  • sortedArrayUsingSelector:@selector(compareStudent:)自定义筛选方法,compareStudent:自己写的筛选方法,该方法写在Student对象中,因为array里面装的是Student对象数据。
    Student中:
    这里写图片描述
    说明:在student.h中声明,返回值固定为NSComparisonResult

    -(compareStudent) compareStudent:(student *)stu
  在student.m中实现该方法
    -(NSComparisonResult)compareStudent:(student *)stu{        NSComparisonResult result=[self.name compare:stu.name];        //以下可以写判断方法。。。。        return result;    }
 在main中调用该方法:

这里写图片描述

  • 使用代码段block,sortedArrayUsingComparator:^NSComparisonResult(id*obj1,id *obj2)
    这里写图片描述
    其实最终原来还是根据student中的名字来排序的在代码中可以看到。

  • 自定义筛选器,sortedArrayUsingDescriptors方法
    这里写图片描述
    这里的需求是先根据学生姓名来排序,然后在根据学生拥有的书名排序。
    首先我们定义一个根据学生姓名排序的筛选器:
    这里写图片描述
    osrtDescriptorWith:表示根据哪个key来为排序标准
    ascending:是否升序,yes表示升序,no表示降序
    根据书名来创建排序器也一样的。


关于NSArray其他操作方法

  • makeObjectsPerformSelector给数组中的每个对象发送一条消息
    这里写图片描述
    其中test方法是student中定义的方法。
    可以有参数,也可以没有参数,但是如果有参数,最多只能有一个参数传递。

  • writeToFile把数组中的数据写出到文件
    这里写图片描述
    ffilepath:文件路径;
    atomically:是否遵守原子性。

  • containsObject是否包含了某个对象值
    这里写图片描述

  • componentsJoinedByString把数组拼接成一个字符串
    这里写图片描述
    方法有一个参数@”-“:表示分割组合成的字符串用“-”来分开。
    最终打印的结果为:
    ×××× - ×××× - ×××× - ××××;

0 0
原创粉丝点击