NSArray数组的学习总结
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降序
- NSMutableArray *array = [NSMutableArray array];
- ......
- NSSortDescriptor *sort1 = [NSSortDescriptor sortDescriptorWithKey:@"price" ascending:YES];
- NSSortDescriptor *sort2 = [NSSortDescriptor sortDescriptorWithKey:@"date" ascending:NO];
- [array sortUsingDescriptors:[NSArray arrayWithObjects:sort1, sort2, nil]];
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数组的学习总结的更多相关文章
- 【java开发】数组基本学习
一维数组 定义:具有相同数据类型的一组数据. 声明:int []a=new int[3]; 释义:该数组的数据类型为int型,该数组长度为3,有3个元素 可采用如下方式为元素赋值:a[0]=1; ...
- OC NSArray 数组
# OC NSArray 数组 NSArray常用方法 获取数组中第一位元素 array.firstObject 获取数组中最后一个元素 array.lastObject 获取数组中指定索引下标的元素 ...
- Javascript设置广告和时间表和数组的学习
<html> <head> <meta charset="utf-8"> <title></title> </he ...
- 16.Object-C--NSArray数组的排序
今天我来总结一下NSArray数组的排序方式. NSArray数组的排序有三种方式: 1.简单排序(sortedArrayUsingSelector:) 2.利用block语法(sortedArray ...
- Java:有关自定数组的学习
Java:有关==自定数组==的学习 在 ==<Java程序设计与数据结构教程>== 里我在==P212~P213==页看到一个GradeRange的程序,它用的数组是自定设定的Grade ...
- C语言《一维数组的学习,冒泡排序》
#include<stdio.h> /* 一维数组的学习,冒泡排序 soulsjie 20170623 */ void main(){ int a[6]; int i,j,k; print ...
- Swift中实现Array数组和NSArray数组的相互转换与遍历
Array是Swift中的数组数据类型.而NSArray是OC中的数组数据类型.两者有差别有联系.在Swift中有时候难免会使用到OC中的一些东西.今天我们就来Swift中使用NSArray和Arra ...
- 关于java基础_数组的学习
数组的学习 1.数组的概念?作用是什么? 系统中存储多个值, 2.数组的定义? 数据类型[] 数组名; 3.定义好数组以后需要对其进行初始化 数组初始化有两种: 第一种动态初始化,指定数组的长度,长度 ...
- Object-c学习之路八(NSArray(数组)遍历和排序)
今天学习了NSArray的遍历和排序,现在在这里做一下总结: 遍历现在实现了四中方法: 排序大概有三中方法:(代码中都有注释) 关于对象的排序还是以Student和Book为例 每个Student持有 ...
随机推荐
- SQL Server -SET NOCOUNT
SET NOCOUNT 使返回的结果中不包含有关受 Transact-SQL 语句影响的行数的信息. 语法 SET NOCOUNT { ON | OFF } 注释 当 SET NOCOUNT 为 ON ...
- python调用ice接口
今天用python调用ice接口,遇到如下提示 ImportError: No module named Ice 解决方案是 set PYTHONPATH=C:\Program Files\ZeroC ...
- Oracle 数据文件 reuse 属性 说明(转载)
Oracle 表空间 创建参数 说明 http://blog.csdn.net/tianlesoftware/archive/2011/01/27/6166928.aspx 当我们对表空间添加数据文件 ...
- JavaScript权威指南阅读笔记3
第六章 对象 1.首先是先介绍了对象直接量的格式:对象直接量就是1.由若干个名/值对组成的映射表,2名/值对中间由冒号分割,3名值对之间由逗号分割,4整个映射表由花括号括起来.这样就组成了一个对象直接 ...
- js抽象类和抽象方法
js中模拟抽象类:在父类中调用一个未定义的方法,这个方法在子类中必须被实现. 1, 模拟类的工厂模式 //基类 var Class = { //基类的静态方法 creat:function(){ // ...
- [C++程序设计]全局,局部变量
在函数声明中出现的参数名,其作用范围只在 本行的括号内.实际上,编译系统对函数声明中的 变量名是忽略的,即使在调用函数时也没有为它们 分配存储单元.例如 int max(int a,int b); ┆ ...
- ThinkPhp调用webservice
模板页: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <titl ...
- 常见的SQL字符串函数
1.LEN:计算字符串的长度(字符的个数) select len('哈哈hello') 返回长度为7 2.datalength();计算字符串所占用的字节数,不属于字符串函数 select DATAL ...
- GitLab CI
GitLab CI持续集成配置方案 目录 1. 持续集成介绍 1.1 概念 1.2 持续集成的好处 2. GitLab持续集成(CI) 2.1 简介 2.2 GitLab简单原理图 2.3 Git ...
- Linux vps无法发送邮件
首先安装sendmail软件...yum install sendmail /etc/init.d/php-fpm restart 来检查下sendmail是否正常运行 /etc/init.d/sen ...