OC NSArray 数组
OC NSArray 数组
NSArray常用方法
获取数组中第一位元素
array.firstObject
获取数组中最后一个元素
array.lastObject
获取数组中指定索引下标的元素
[array objectAtIndex:1]
字面量的写法
array[1] //建议使用字面量写法,可读性好,高效
判断数组中是否包含某一项
- (BOOL)containsObject:(ObjectType)anObject;
如果要判断自定义类的数组中是否包含某一项需要重写该类的 - (BOOL)isEqual:(id)object方法。
- (BOOL)isEqual:(id)object {
//判断对象
if (self == object) {
return YES;
}
//判断类
if ([self class] != [object class]) {
return NO;
}
Person * p = (Person *)object;
//判断属性
if (![_name isEqualToString:p.name]) {
return NO;
}
if (_age != p.age) {
return NO;
}
return YES;
}
数组的快速枚举
for (NSString * string in array) {
NSLog(@"%@",string);
}
数组的枚举器枚举
NSEnumerator的nextObject方法可以遍历每个集合元素,结束返回nil,通过与while结合使用可遍历集合中所有项。
对可变数组进行枚举操作时,不能通过添加或删除对象这类方式来改变数组容器。
创建枚举:向容器类对象请求枚举器
- (NSEnumerator * )objectEnumerator;
反向枚举 - (NSEnumerator * )reverseObjectEnumerator;
浏览集合类对象的全部元素 - (id)nextObject;
例:
NSEnumerator *enumerator = [array objectEnumerator];
//NSEnumerator *enumerator = [array reverseObjectEnumerator];
id anObject;
while (anObject = [enumerator nextObject]) {
NSLog(@"%@",anObject);
}
通过block块枚举
[array enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
NSLog(@"%@,%ld",obj,idx);
if (idx == 1) {
*stop = YES;
}
}];
给数组里的对象发送test消息
[array makeObjectsPerformSelector:@selector(test)];
根据对象返回索引值
[array indexOfObject:@"c"];
不可变数组后追加对象
[array arrayByAddingObject:@"d"];
给自定义对象的数组排序
[array sortedArrayUsingSelector:@selector(compareAge:)];
给自定义对象的数组排序需要声明并实现该对象的比较方法
Person.h
- (NSComparisonResult)compareAge:(Person *)p;
Person.m
- (NSComparisonResult)compareAge:(Person *)p {
if (_age > p.age) {
return NSOrderedDescending;
} else if (_age < p.age) {
return NSOrderedAscending;
} else {
return NSOrderedSame;
}
}
sortedArrayUsingComparator 通过block自定义对象的数组排序
NSArray * newArray = [array sortedArrayUsingComparator:^NSComparisonResult(id _Nonnull obj1, id _Nonnull obj2) {
Person * p1 = (Person *)obj1;
Person * p2 = (Person *)obj2;
if (p1.age > p2.age) {
return NSOrderedAscending;
} else if (p1.age < p2.age) {
return NSOrderedDescending;
} else {
return NSOrderedSame;
}
}];
NSMutableArray常用方法
初始化
[NSMutableArray array]
追加元素
[array addObject:@"1"];
追加数组
[array addObjectsFromArray:@[@"2",@"3"]];
插入元素
[array insertObject:@"0" atIndex:0];
删除最后一项
[array removeLastObject];
删除指定对象
[array removeObject:@"2"];
删除指定索引下的对象
[array removeObjectAtIndex:1];
删除子数组
[array removeObjectsInArray:@[@"0",@"1"]];
根据索引替换数组中的对象
[array replaceObjectAtIndex:1 withObject:@"a"];
交换两个索引下的对象
[array exchangeObjectAtIndex:0 withObjectAtIndex:2];
覆盖原数组
[array setArray:@[@"a",@"b",@"c"]];
OC NSArray 数组的更多相关文章
- iOS - OC NSArray 数组
前言 @interface NSArray<__covariant ObjectType> : NSObject <NSCopying, NSMutableCopying, NSSe ...
- Objective-C之NSArray(数组)默认排序与自定义排序
在讲OC中数组的排序之前我先上一段代码,它是简单数组排序的一种方法(也就是元素是字符串或者数据的数组,因为后面要讲元素为类的数组排序) 代码1: NSArray *sortArr4 = [sortAr ...
- OC基础:数组.字典.集 分类: ios学习 OC 2015-06-18 18:58 47人阅读 评论(0) 收藏
==============NSArray(不可变数组)=========== NSArray,继承自NSObject 用来管理(储存)一些有序的对象,不可变数组. 创建一个空数组 NSArray ...
- swift和OC - 拆分数组 和 拆分字符串
1. 拆分数组 /// 根据 数组 截取 指定个数返回 多个数组的集合 func splitArray( array: [Date], withSubSize subSize: Int) -> ...
- Swift中实现Array数组和NSArray数组的相互转换与遍历
Array是Swift中的数组数据类型.而NSArray是OC中的数组数据类型.两者有差别有联系.在Swift中有时候难免会使用到OC中的一些东西.今天我们就来Swift中使用NSArray和Arra ...
- 16.Object-C--NSArray数组的排序
今天我来总结一下NSArray数组的排序方式. NSArray数组的排序有三种方式: 1.简单排序(sortedArrayUsingSelector:) 2.利用block语法(sortedArray ...
- OC中数组类NSArray的详解,数组的遍历(二)
数组类的便利 1.for循环(大家都会的...) 2.NSEmunerator 3.for in 首先重点说下 第二种NSEmunerator枚举器,系统声明是 @interface NSEnumer ...
- OC中数组类NSArray的详解,常用属性和方法(一)
数组是一个有序的集合,OC中的数组只能存储对象类型, 但是对于对象的类型没有限制. 通过下标访问数组元素,下标从0开始. NSA
- OC: 数组、集合、字典
数组.字典.集合 参考1 参考2 参考3 参考4 参考5 NSArray * nn = @[@"元素1",@"元素2",@"元素3&quo ...
随机推荐
- 一个ajax同步与异步引发的血案。
前言 公司做网上促销活动,需要充值换取相应的抽奖资格,抽奖可以获得丰厚的礼品,而且抽奖资格门槛有点高,领导下达命令保证活动的正常上线与运行,领导很重视,就这样,在领导的安排下进行了相关活动的codin ...
- OCP开放封闭原则
一.定义 软件实体(类.模块.函数等)应该是可以扩展的,但是不可修改. 如果正确的应用了OCP原则,那么 以后在进行同样的改动时,就只需要添加新的代码,不必修改已经正常运行的代码. 二.OCP概述 1 ...
- Apache+Mod_Python配置
我其实不是个适合做编程的人,因为喜欢折腾,不喜欢日复一日的重复同样的事情.感觉挺适合做网管(运维)的. 经常在摆弄一些小众的程序员不怎么会关心的东西,不走寻常路.有时也挺纠结的,折腾这些东西的过程中, ...
- jquery.form.js不能解决连接超时(timeout)的解决方法
最近在使用jquery.form.js提交包含文件的表单时,碰到了一个问题:当碰上网速较慢时,而我们又设置了timeout时,例如: var options = { timeout: 3000 //限 ...
- 修改thinkphp路由模式,去掉Home
第一步:入口文件增加 define('BIND_MODULE', 'Home'); 第二步:修改config文件,我这里路由模式设置为2 效果展示:
- 从源码角度理清memcache缓存服务
memcache作为缓存服务器,用来提高性能,大部分互联网公司都在使用. 前言 文章的阅读的对象是中高级开发人员.系统架构师. 本篇文章,不是侧重对memcache的基础知识的总结,比如se ...
- windows不能显示此连接属性。windows management instrumentation (WMI) 信息可能损坏
Windows Management Instrumentation (WMI)信息可能损坏错误修复 在 查看“本地连接”的属性,并切换到“高级”选项卡后,提示:“Windows不能显示此连接的属性. ...
- 关于linux下DB2创建数据库报错问题
公司业务需要,把服务搭在中标下,在中标下装了DB2 Express-C v9.7.1,之前用着没有问题,隔了一段时间没用,最近又需要用到它,出了一些菜鸟问题,记录下来以免有人和我犯同样的错误...进入 ...
- Quartz任务调度器
在使用jdk的timer时发现无法满足开发需求:即无法在指定的日期进行执行任务. 这便引入一个优秀的开源任务调度框架“quartz”. 这里加入的是quartz-1.8.6版本.Quart的官网: ...
- store.js - 轻松实现本地存储(LocalStorage)
store.js 是一个兼容所有浏览器的 LocalStorage 包装器,不需要借助 Cookie 或者 Flash.store.js 会根据浏览器自动选择使用 localStorage.globa ...