1.不可变数组NSArray

NSArray是不可变的,而且只能储存Object-c对象。另外,数组的最后一个元素一定是nil,表示结束。

注:这些集合类只能收集cocoa对象(NSOjbect对象),如果想保存一些原始的C数据(例如,int, float, double, BOOL等,

则需要将这些原始的C数据封装成NSNumber类型的,NSNumber对象是cocoa对象,可以被保存在集合类中。

对数组进行的操作可以分为:增(插入),删,改,查 , 取,遍历,排序,比较,

对于NSArray来说,因为本身是不可变的,所以对NSArray的操作没有增和删.

<1>NSArray的初始化

NSArray *array = [NSArray arrayWithObjects:@"hello",@"小妹妹",@"fuck you",@"baby", nil];

<2>从数组中取值

  根据下标取数组中的元素

  NSString *string = [array objectAtIndex:1];

  字符串中是否包含某个字符,获取数组中某元素对应的下标(索引)

  NSLog(@"%lu",(unsigned long)[array indexOfObject:@"boby"]); 

  取出数组最后一个元素

  NSLog(@"%@",[array lastObject]);

<3>查询(关键词contains)

  - (BOOL)containsObject:(ObjectType)anObject;  //查询数组中是否包含某一个元素,返回BOOL类型值  

<4> 数组添加元素,组成一个新的数组

NSArray *array2 = [array arrayByAddingObject:@"嘿嘿嘿"];

for (NSString *str in array2) {

NSLog(@"%@",str);

}

<5>数组内的元素以指定的字符,连接构成字符串(关键字compenents)

NSString *string = [array2 componentsJoinedByString:@"~"];

NSLog(@"%@",string);

<6>对字符串按照指定的字符进行截取,将截取的多段字符串放入数组中(关键字compenents)

NSString *string = @"www.lanou3g.com";

NSArray *array = [string componentsSeparatedByString:@"."];

NSLog(@"%@",array);

<7> 数组的字面量写法

NSArray *name = @[@"1",@"45",@"33"];    //字面量赋值

<8>对数组内的全部元素进行操作

  - (void)makeObjectsPerformSelector:(SEL)aSelector

  将某一个方法操作作用在数组每一个元素上

<9> 数组练习题(随机生成十个数字,进行冒泡排序)

NSMutableArray *array = [NSMutableArray arrayWithCapacity:0];

for (int i = 0; i < 10; i++) {

NSNumber *num = [NSNumber numberWithInteger:arc4random()% (90 -10 +1)+10 ];   //数组里存储的是对象,要把数字转换成NSNumber

[array addObject:num];      //把NSNumber的对象放入到数组当中

}

NSLog(@"array = %@",array);

for (int i = 0; i < [array count] - 1; i++) {

for (int j = 0; j < [array count] - i - 1; j++) {

if ([array objectAtIndex:j]  > [array objectAtIndex:j+1]) {      //直接使用了判断符号>或<或者==,需要将数组内的对象类型转化为基本数据类型,或者用compare方法

[array exchangeObjectAtIndex:j withObjectAtIndex:j+1];    //根据下标索引交换数组内的两个元素的位置

}

}

}

NSLog(@"array改 = %@",array);

<10>NSArray的排序

  系统提供了一个sortedArrayUsingSeletor:()函数,用于对字符串数组进行排序,会在排序完成后返回一个新的数组

  NSArray *array = @[@"hehe",@"afd",@"fcf",@"igl"];

  NSArray *newArray = [array sortedArrayUsingSelector:@selector(compare:)];

  NSLog(@"%@",newArray);

  数组中都是字符串,运用字符串比较的方法compare,返回值类型正好满足SEL参数的需求,SEL类型是方法名

  同时我们也可以自己重写compare的方法,根据自己的需求进行比较排序

  在对对象进行排序时,可以使用 NSSortDescriptor,

  + (instancetype)sortDescriptorWithKey:(nullable NSString *)key ascending:(BOOL)ascending

  如果数组里元素直接可以排序,key填self,如果数组里元素为自定义类的对象,key填相应的属性

  ascending:YES升序 NO降序

  1. NSMutableArray *array = [NSMutableArray array];
  2. ......
  3. NSSortDescriptor *sort1 = [NSSortDescriptor sortDescriptorWithKey:@"price" ascending:YES];
  4. NSSortDescriptor *sort2 = [NSSortDescriptor sortDescriptorWithKey:@"date" ascending:NO];
  5. [array sortUsingDescriptors:[NSArray arrayWithObjects:sort1, sort2, nil]];     
  它把元素的某个属性作为key进行升序或降序的排序,每个NSSortDescriptor就是一个排序条件,可以多个条件组合排序.
  首先按照价格升序排列;当价格相同时,按照日期降序排列。 

2.可变数组

  NSMutableArray,继承NSArray,在其基础上增加了:增删改三块功能

- (void)addObject:(ObjectType)anObject;   //增加

- (void)insertObject:(ObjectType)anObject atIndex:(NSUInteger)index;  //根据下标插入一个元素

- (void)removeLastObject;  //移除最后一个元素

- (void)removeObjectAtIndex:(NSUInteger)index;    //根据下标移除元素

- (void)replaceObjectAtIndex:(NSUInteger)index withObject:(ObjectType)anObject;    //替换,根据一个元素替换数组内的一个元素

SDK中的常用的一定会记住,不常用的不需要记住,但需要知道系统提供给我们一个完善的功能,当我们遇到这种情况时,想起来,然后可以去SDK中寻找

NSArray数组的学习总结的更多相关文章

  1. 【java开发】数组基本学习

    一维数组 定义:具有相同数据类型的一组数据. 声明:int []a=new int[3];    释义:该数组的数据类型为int型,该数组长度为3,有3个元素 可采用如下方式为元素赋值:a[0]=1; ...

  2. OC NSArray 数组

    # OC NSArray 数组 NSArray常用方法 获取数组中第一位元素 array.firstObject 获取数组中最后一个元素 array.lastObject 获取数组中指定索引下标的元素 ...

  3. Javascript设置广告和时间表和数组的学习

    <html> <head> <meta charset="utf-8"> <title></title> </he ...

  4. 16.Object-C--NSArray数组的排序

    今天我来总结一下NSArray数组的排序方式. NSArray数组的排序有三种方式: 1.简单排序(sortedArrayUsingSelector:) 2.利用block语法(sortedArray ...

  5. Java:有关自定数组的学习

    Java:有关==自定数组==的学习 在 ==<Java程序设计与数据结构教程>== 里我在==P212~P213==页看到一个GradeRange的程序,它用的数组是自定设定的Grade ...

  6. C语言《一维数组的学习,冒泡排序》

    #include<stdio.h> /* 一维数组的学习,冒泡排序 soulsjie 20170623 */ void main(){ int a[6]; int i,j,k; print ...

  7. Swift中实现Array数组和NSArray数组的相互转换与遍历

    Array是Swift中的数组数据类型.而NSArray是OC中的数组数据类型.两者有差别有联系.在Swift中有时候难免会使用到OC中的一些东西.今天我们就来Swift中使用NSArray和Arra ...

  8. 关于java基础_数组的学习

    数组的学习 1.数组的概念?作用是什么? 系统中存储多个值, 2.数组的定义? 数据类型[] 数组名; 3.定义好数组以后需要对其进行初始化 数组初始化有两种: 第一种动态初始化,指定数组的长度,长度 ...

  9. Object-c学习之路八(NSArray(数组)遍历和排序)

    今天学习了NSArray的遍历和排序,现在在这里做一下总结: 遍历现在实现了四中方法: 排序大概有三中方法:(代码中都有注释) 关于对象的排序还是以Student和Book为例 每个Student持有 ...

随机推荐

  1. Git入门——基础知识问答

    问题一:为什么要选择Git作为Android开发的版本控制工具?     答:1)git是android项目和社区的统一语言.            2)高通版本发布频繁,需要与平台及时同步,快速re ...

  2. Android的Fragment中onActivityResult不被调用的解决方案

    常见的,我们会在FragmentActivity中嵌套一层Fragment使用,甚至两次或多层Fragment嵌套使用.这个时候,在第二级或者更深级别的Fragment调用startActivityF ...

  3. 修改 “嗨加游-Prefix.pch” 或者 “嗨加游-Info.plist ” 方法

    如果要更改Info.plist与Prefix.pch文件实际路径,也就是实际文件的位置(不是在工程中的组织路径),需要到Build Settings中修改对应的配置,不然工程就找不到对应的Info.p ...

  4. HBase配置&启动脚本分析

    本文档基于hbase-0.96.1.1-cdh5.0.2,对HBase配置&启动脚本进行分析 date:2016/8/4 author:wangxl HBase配置&启动脚本分析 剔除 ...

  5. C++服务器设计(一):基于I/O复用的Reactor模式

    I/O模型选择 在网络服务端编程中,一个常见的情景是服务器需要判断多个已连接套接字是否可读,如果某个套接字可读,则读取该套接字数据,并进行进一步处理. 在最常用的阻塞式I/O模型中,我们对每个连接套接 ...

  6. OpenCV——识别印刷体数字

    数字识别和其他的所有计算机视觉相关的应用都会分为两个步骤:ROI抽取和识别. 1. ROI抽取即将感兴趣的区域从原始图像中分离初来,这个步骤包括二值化,噪点的消除等2. 识别即通过一些分类器将第一步中 ...

  7. (转) mac 下的eclipse 配置 python 2.7

    原地址: http://marsfreewill.blogspot.it/2012/08/mac-ospythonpydeveclipse.html   在MAC OS上配置Python开发环境(Py ...

  8. JavaScript开发规范

    作为一名开发人员(WEB前端JavaScript开发),不规范的开发不仅使日后代码维护变的困难,同时也不利于团队的合作,通常还会带来代码安全以 及执行效率上的问题.本人在开发工作中就曾与不按规范来开发 ...

  9. 什么是UML类图

    百度了下,看评论不错我就收藏了,学习,真心不懂!!! 首先是复习一下UML中九种图的理解:http://xhf123456789plain.blog.163.com/blog/static/17288 ...

  10. php word转HTML

    因为安装的的xampp不知道如何查看我的Apache版本是多少,就先把com.allow_dcom=true打开了,但是仍旧报错说找不到com类,然后就把下面的extension扩展添加到php.in ...