此文是对数组NSArray与NSMutableArray知识点的总结,主要是一些常见的操作,别外一些操作见其相应的文档,下面的代码部分还运用的第三方插件BlocksKit相结合;

a:Foundation中数组(NSArray)是有序的对象集合
b:NSArray只能存储Objective-C的对象,而不能存储像int、float这些基本数据类型,但是Objective-C对C兼容,所以在Objective-C程序中,仍然可以使用C的数组来存储基本数据类型
c:NSArray一旦创建便不可以再对它就进行更改,如果要进行对数组的增、删、改等操作的话,需要使用NSArray的子类NSMutableArray来创建对象

1:NSArray一些常见操作

NSArray *array=[NSArray array];
//增加单个
//array=[NSArray arrayWithObject:@"wujy"];
//增加多个
array=[NSArray arrayWithObjects:@"cnblogs",@".com",nil];
NSInteger arrayCount=array.count;
NSLog(@"当前array数组个数为:%ld",arrayCount); int i=;
for (id obj in array) {
NSLog(@"当前第%d个为%@",i,obj);
i++;
} //常用的数组操作
NSString *lastString=[array lastObject];
NSLog(@"最后一个对象的值为:%@",lastString); NSString *firstString=[array firstObject];
NSLog(@"第一个对象的值为:%@",firstString); NSString *indexString=[array objectAtIndex:];
NSLog(@"第二个对象的值为:%@",indexString); NSInteger indexInt=[array indexOfObject:@"cnblogs"];
NSLog(@"返回索引的位置:%ld",indexInt); //将字符串转化成数组
NSString *arrayString=@"a,b,c,d";
NSArray *newArray=[arrayString componentsSeparatedByString:@","];
for (id obj in newArray) {
NSLog(@"当前字符串转化为%@",obj);
} //判断数组是否存在元素
if ([newArray containsObject:@"c"]) {
NSLog(@"存在字母c的元素");
}
else
{
NSLog(@"不存在字母c的元素");
} //简便创建
NSArray *twoArray=[NSArray arrayWithObjects:@,@,@,@,@,nil];
//迭代器遍历 reverseObjectEnumerator数组元素从后向前访问
NSEnumerator *arrayenumerator=[twoArray reverseObjectEnumerator];
id obj=nil;
while (obj=[arrayenumerator nextObject]) {
NSLog(@"当前值为:%d",[obj intValue]);
} //利用BlocksKit插件进行遍历
NSArray *frArray=[NSArray arrayWithObjects:@(0.2),@(0.5),@(0.9),nil];
[frArray bk_each:^(id obj) {
NSLog(@"%@",obj);
}]; //跟数组项进行对比,若不存在则为空 存在则为符合的值
id found=[frArray bk_match:^BOOL(id obj) {
BOOL match=([obj floatValue]==0.5)?YES:NO;
return match;
}];
NSLog(@"有符合的值:%@",found); id notFound=[frArray bk_match:^BOOL(id obj) {
BOOL match=([obj floatValue]==0.7)?YES:NO;
return match;
}];
NSLog(@"没有符合的值(nil):%@",notFound); //过滤数组
NSArray *selectFound=[frArray bk_select:^BOOL(id obj) {
BOOL match=([obj floatValue]>0.3)?YES:NO;
return match;
}];
NSLog(@"当前过滤array数组个数为:%ld",selectFound.count);
for (id obj in selectFound) {
NSLog(@"当前符合为%@",obj);
} //过滤数组 取相反
NSArray *rejectFound=[frArray bk_reject:^BOOL(id obj) {
BOOL match=([obj floatValue]>0.3)?YES:NO;
return match;
}];
NSLog(@"当前取反array数组个数为:%ld",rejectFound.count);
for (id obj in rejectFound) {
NSLog(@"当前符合为(0.2符合)%@",obj);
} //遍历数组 对每个值都进行修改 组成新的数组
NSArray *mapFound = [array bk_map:^id(id obj) {
return [obj stringByAppendingString:@".png"];
}];
for (id obj in mapFound) {
NSLog(@"当前map %@",obj);
} //合并数组的各项值
//进行数组的合并 中间可以加分格符之类 (这边是前面加的一个|;合并后的字符串为:|cnblogs.com)
NSString *concentrated = [array bk_reduce:@"|" withBlock:^id(id sum, id obj) {
return [sum stringByAppendingString:obj];
}];
NSLog(@"合并后的字符串为:%@",concentrated); //相加 还有一个为整数型 bk_reduceInteger
float value = [frArray bk_reduceFloat: withBlock:^CGFloat(CGFloat result, id obj) {
return result + [obj floatValue];
}];
NSLog(@“合并后的frArray值为:%f",value);

2:NSMutableArray一些常见的操作

//从array转nsmutablearray
NSArray *array=[[NSArray alloc] initWithObjects:@"wujy",@"cnblogs",nil];
NSMutableArray *mutableArray=[NSMutableArray arrayWithArray:array]; //创建NSMutableArray
NSMutableArray *newMutableArray=[NSMutableArray array];
[newMutableArray addObject:@"a"];
[newMutableArray addObjectsFromArray:[[NSArray alloc] initWithObjects:@"b",@"c",@"d",@"e",nil]];
//迭代器遍历 reverseObjectEnumerator数组元素从后向前访问
NSEnumerator *arrayenumerator=[newMutableArray reverseObjectEnumerator];
id obj=nil;
while (obj=[arrayenumerator nextObject]) {
NSLog(@"当前值为:%@",obj);
} //创建NSMutableArray
NSMutableArray *capacityArray=[[NSMutableArray alloc] initWithCapacity:];
[capacityArray addObjectsFromArray:[[NSArray alloc] initWithObjects:@,@,@,nil]];
NSLog(@"删除前(1,2,3):%@",capacityArray);
//删除指定的元素
[capacityArray removeObject:@];
NSLog(@"删除后(1,2):%@",capacityArray);
//插入
[capacityArray insertObject:@ atIndex:];
NSLog(@"插入后的(1,2,4)%@",capacityArray);
//插入多个
NSIndexSet *set=[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(, )];
[capacityArray insertObjects:[[NSArray alloc] initWithObjects:@,@,nil] atIndexes:set];
NSLog(@"插入多个以后的(5,6,1,2,4):%@",capacityArray); //Blocks操作
//过滤
[capacityArray bk_performSelect:^BOOL(id obj) {
BOOL match=([obj intValue]>)?YES:NO;
return match;
}];
NSLog(@"过滤后的数组值为(5,6,4):%@",capacityArray); //取反过滤
[capacityArray bk_performReject:^BOOL(id obj) {
BOOL match=([obj intValue]>)?YES:NO;
return match;
}];
NSLog(@"过滤取反后的数组值为(5,4):%@",capacityArray); //对数组的值进行操作
[capacityArray bk_performMap:^id(id obj) {
return [NSNumber numberWithInt:[obj intValue]+];
}];
NSLog(@"map后的数组值为(6,5):%@",capacityArray);

最近有个妹子弄的一个关于扩大眼界跟内含的订阅号,每天都会更新一些深度内容,在这里如果你感兴趣也可以关注一下(嘿对美女跟知识感兴趣),当然可以关注后输入:github 会有我的微信号,如果有问题你也可以在那找到我;当然不感兴趣无视此信息;

IOS数组NSArray与NSMutableArray知识点的更多相关文章

  1. 15.Object-C--浅谈Foundation框架OC数组NSArray与NSMutableArray

    昨天总结了一下NSString与NSMutableString,今天我在这里总结一下NSArray与NSMutableArray. NSArray数组是:不可变数组. nil 是数组元素结束的标记.O ...

  2. iOS - 数组(NSArray)

    1. 数组的常用处理方式 //--------------------不可变数组 //1.数组的创建 NSString *s1 = @"zhangsan"; NSString *s ...

  3. 数组NSArray与NSMutableArray的常用方法

    数组中可以放任何类型的数据,并且一个数组中的元素类型可以不一致.只要是(id类型)对象. NSArray 1.初始化 NSArray *array = @[]; 2.初始化,最后需要以nil结尾 NS ...

  4. IOS - Objective-C NSArray和NSMutableArray的详解 使用

    原文地址:http://blog.csdn.net/totogo2010/article/details/7729377 Objective-C的数组比C++,Java的数组强大在于,NSArray保 ...

  5. iOS阶段学习第15天笔记(NSArray与NSMutableArray 数组)

    iOS学习(OC语言)知识点整理 一.OC中的数组 1)数组:也是一个对象,数组中存放的是对象的地址,可以存放任意类型对象的地址,只能是对象不能是具体的数值,数组是有序的,      可以存放重复的元 ...

  6. NSArray与NSMutableArray 数组与可变数组

    1.NSArray 是一个父类,NSMUtableArray是其子类,他们构成了OC的数组.2.NSArray的创建NSArray * array = [[NSArray alloc]initWith ...

  7. Foundation框架—— 数组 (NSArray NSMutableArray )

    基础知识回顾 1.在给可变数组添加元素时,要保证该数组已被初始化 2.在遍历可变数组时,不能对其进行增删改 3.NSMutableArray继承自NSArray,几乎拥有NSArray的一切方法. 4 ...

  8. iOS - OC NSArray 数组

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

  9. 【转】不可变数组NSArray与可变数组NSMutableArray

    原文网址:http://www.jianshu.com/p/1ad327f56d1d 不可变数组NSArray //创建一个空数组 NSArray *array = [NSArray array]; ...

随机推荐

  1. com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: Invalid byte 2 of 2-byte

    com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: Invalid byte 2 of 2-byte ...

  2. 理解js中的自由变量以及作用域的进阶

    如果你不知道什么是作用域,建议你先看什么是作用域链,什么是原型链.这篇文章,因为这些内容都是有关联性的. 什么是自由变量? 如我在全局中定义了一个变量a,然后我在函数中使用了这个a,这个a就可以称之为 ...

  3. outlook无法创建保存附件解决

    用outlook2003收发邮件时,当打开或另存附件时提示“无法创建和保存文件” 解决 开始-运行,输入“regedit”打开注册表,打开以下键值“HKEY_CURRENT_USER\software ...

  4. 搭建windows下filezilla FTP服务器

    FTP服务器必不可少,鉴于serv-u越来越冗余繁多的设置,个人还是比较喜欢简单.干净,满足需求即可的东东,所以选择filezilla.更主要的原因是ta是开元免费使用的,虽然免费,功能却齐全,我发现 ...

  5. hash函数为什么要选择对素数求余?

    常用的hash函数是选一个数m取模(余数),这个数在课本中推荐m是素数,但是经常见到选择m=2^n,因为对2^n求余数更快,并认为在key分布均匀的情况下,key%m也是在[0,m-1]区间均匀分布的 ...

  6. mysql 在row模式下truncate 与 delete 二进制日志记录的差异

    二进行日志的格式为row mysql> show variables like 'binlog_format'; +---------------+-------+ | Variable_nam ...

  7. 移动端手势库Hammer.js学习

    感觉移动端原生支持的 touch.tap.swipe 几个事件好像还不够用,某些时候还会用到诸如缩放.长按等其他功能. 近日学习了一个手势库 Hammer.js,它是一个轻量级的触屏设备手势库,能识别 ...

  8. dp --- Codeforces 245H :Queries for Number of Palindromes

    Queries for Number of Palindromes Problem's Link:   http://codeforces.com/problemset/problem/245/H M ...

  9. .Net配置文件——反射+配置文件存储类型实例

    配置文件+反射确实去除了选择语句的繁琐,带来了优美的赶脚! 首先改进了一下类(接上文): ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 ...

  10. Vector Clock/Version Clock

    physical clock 机器上的物理时钟,不同的机器在同一个时间点取到的physical clock不一样,之间会存在一定的误差,NTP可以用来控制这个误差,同一个机房内的机器之间的时钟误差可以 ...