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 数组的更多相关文章

  1. iOS - OC NSArray 数组

    前言 @interface NSArray<__covariant ObjectType> : NSObject <NSCopying, NSMutableCopying, NSSe ...

  2. Objective-C之NSArray(数组)默认排序与自定义排序

    在讲OC中数组的排序之前我先上一段代码,它是简单数组排序的一种方法(也就是元素是字符串或者数据的数组,因为后面要讲元素为类的数组排序) 代码1: NSArray *sortArr4 = [sortAr ...

  3. OC基础:数组.字典.集 分类: ios学习 OC 2015-06-18 18:58 47人阅读 评论(0) 收藏

    ==============NSArray(不可变数组)=========== NSArray,继承自NSObject  用来管理(储存)一些有序的对象,不可变数组. 创建一个空数组 NSArray ...

  4. swift和OC - 拆分数组 和 拆分字符串

    1. 拆分数组 /// 根据 数组 截取 指定个数返回 多个数组的集合 func splitArray( array: [Date], withSubSize subSize: Int) -> ...

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

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

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

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

  7. OC中数组类NSArray的详解,数组的遍历(二)

    数组类的便利 1.for循环(大家都会的...) 2.NSEmunerator 3.for in 首先重点说下 第二种NSEmunerator枚举器,系统声明是 @interface NSEnumer ...

  8. OC中数组类NSArray的详解,常用属性和方法(一)

    数组是一个有序的集合,OC中的数组只能存储对象类型, 但是对于对象的类型没有限制. 通过下标访问数组元素,下标从0开始. NSA

  9. OC: 数组、集合、字典

    数组.字典.集合 参考1   参考2  参考3  参考4  参考5 NSArray * nn  = @[@"元素1",@"元素2",@"元素3&quo ...

随机推荐

  1. winform中ComboBox利用AutoComplete属性实现模糊查询(有缺陷)

    上一篇文章是用ComboBox里面的原生事件实现模糊查询,操作比较灵活一些,但是收到评论说,利用AutoComplete属性就可以实现模糊查询,但是据本人所了解,AutoComplete虽然能够方便的 ...

  2. css3代码让页面倾斜

    教大家一个方法使用CSS把整个网页倾斜,代码只有在支持CSS3.0的浏览器上有效果.目前只有IE9以上版本及firefox高版本支持,其它浏览器没有测试.代码如下 body{ -webkit-tran ...

  3. iOS 基础控件(下)

    上篇介绍了UIButton.UILabel.UIImageView和UITextField,这篇就简短一点介绍UIScrollView和UIAlertView. UIScrollView 顾名思义也知 ...

  4. iOS——使用StroryBoard页面跳转及传值

    之前在网上搜iOS的页面跳转大多都是按回以前的那种xib的形式,但鄙人是使用storyboard的.这篇就只介绍利用storyboard进行页面跳转与传值. 新建页面 iOS的程序也是使用了MVC的思 ...

  5. 分享一个递归无限级拼接Json的方法---ExtJs的TreePanel和TreeGrid均适用(Ef,Lambda,Linq,IQueryable,List)

    话不多说,先上实体类,如果你不是codefirst,就把它当成数据表结构. 下面是底层BaseDal获取数据的方法  (如果你没有Base类,直接写在你的DAL层和BLL层) 下面是BaseServi ...

  6. 【C#】第3章学习要点(一)--整体把握

    分类:C#.VS2015 创建日期:2016-06-18 使用教材:(十二五国家级规划教材)<C#程序设计及应用教程>(第3版) 一.使用别人已经设计好的类简化你的代码编写工作量 当让你去 ...

  7. border-style 属性

    border-style 属性用于设置元素所有边框的样式,或者单独地为各边设置边框样式. 只有当这个值不是 none 时边框才可能出现. 例子 1 border-style:dotted solid ...

  8. [javaEE] 反射-通过反射了解集合泛型本质

    java中的泛型是防止错误输入的,只在编译时刻起作用 package com.tsh.reflect; import java.lang.reflect.Method; import java.uti ...

  9. 【FOL】万里长征第一步

    准备了好久了,中间断断续续看了些资料,也写了几个小demo练手,今天正式开始. 因为要模拟debug和release环境,手上资源又很缺,必须把一些已经拼好的图片进行切割,网络上找了半天倒是有几个切图 ...

  10. 分享一组很赞的 jQuery 特效【附源码下载】

    作为最优秀的 JavaScript 库之一,jQuery 不仅使用简单灵活,同时还有许多成熟的插件可供选择,它可以帮助你在项目中加入漂亮的效果.这篇文章挑选了8个优秀的 jQuery 实例教程,这些  ...