博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
NSArray与NSMutableArray
阅读量:5046 次
发布时间:2019-06-12

本文共 4806 字,大约阅读时间需要 16 分钟。

1.NSArray基本概念

什么是NSArray

NSArray是OC中的数组类,开发中建议尽量使用NSArray替代C语言中的数组

NSArray有哪些使用注意

  1. 只能存放任意OC对象, 并且是有顺序的
  2. 不能存储非OC对象, 比如int\float\double\char\enum\struct等
  3. 它是不可变的,一旦初始化完毕后,它里面的内容就永远是固定的, 不能删除里面的元素, 也不能再往里面添加元素
  4. NSArray使用NSLog()打印,输出的是小括号的格式。
  5. NSArray中不能存储nil,因为NSArray认为nil是数组的结束(nil是数组元素结束的标记)。nil就是0。0也是基本数据类型,不能存放到NSArray中。

NSArray的常用方法

- (NSUInteger)count;

获取集合元素个数

- (id)objectAtIndex:(NSUInteger)index;

获得index位置的元素

- (BOOL)containsObject:(id)anObject;

是否包含某一个元素

- (id)lastObject;

返回最后一个元素

- (id)firstObject;

返回最后一个元素

- (NSUInteger)indexOfObject:(id)anObject;

查找anObject元素在数组中的位置(如果找不到,返回-1)

- (NSUInteger)indexOfObject:(id)anObject inRange:(NSRange)range;

在range范围内查找anObject元素在数组中的位置

书写NSArray简写形式

NSArray *arr = [NSArray arrayWithObjects:@"lnj", @"lmj", @"jjj", nil];NSArray *arr = @[@"lnj", @"lmj", @"jjj"];// 获取数组元素的简写NSLog(@"%@", [arr objectAtIndex:0]);NSLog(@"%@", arr[0]);

 

2.NSArray遍历

增强for 循环的使用

如何使用增强for循环,遍历NSArray数组

//逐个取出arr中的元素, 将取出的元素赋值给obj// 注意: obj的类型可以根据数组中元素的类型来写, 不一定要写NSObjectfor (NSString *obj in arr) {    NSLog(@"obj = %@", obj);                     }

 

如何使用OC数组的迭代器来遍历数组

// 每取出一个元素就会调用一次block// 每次调用block都会将当前取出的元素和元素对应的索引传递给我们// obj就是当前取出的元素, idx就是当前元素对应的索引// stop用于控制什么时候停止遍历[arr enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {    if (idx == 1) {        *stop = YES;    }    NSLog(@"obj = %@, idx = %lu", obj, idx);}];

3.数组排序

如何对数据进行排序

NSArray *arr = @[@10, @20, @5, @7, @15];NSLog(@"排序前: %@", arr);// 注意: 想使用compare方法对数组中的元素进行排序, 那么数组中的元素必须是Foundation框架中的对象, 也就是说不能是自定义对象elector:@selectoNSArray *newArr = [arr sortedArrayUsingSr(compare:)];NSLog(@"排序后: %@", newArr);

如何对对象进行排序

Person *p1 = [Person new];p1.age = 10;Person *p2 = [Person new];p2.age = 20;Person *p3 = [Person new];p3.age = 5;Person *p4 = [Person new];p4.age = 7;NSArray *arr = @[p1, p2, p3, p4];NSLog(@"排序前: %@", arr);// 按照人的年龄进行排序// 该方法默认会按照升序排序NSArray *newArr = [arr sortedArrayWithOptions:NSSortStable usingComparator:^NSComparisonResult(Person *obj1, Person *obj2) {    // 每次调用该block都会取出数组中的两个元素给我们    // 二分    //        NSLog(@"obj1 = %@, obj2 = %@", obj1, obj2);    return obj1.age > obj2.age; //降序    //        return obj1.age < obj2.age; //升序    /*     改方法,产生随机数用     if (obj1.age > obj2.age) {     // 5 4     return NSOrderedDescending;     }else if(obj1.age < obj2.age)     {     // 4 5     return NSOrderedAscending;     }else     {     return NSOrderedSame;     }     */}];NSLog(@"排序后: %@", newArr);

 

 

4.NSArray和NSString转换

NSArray *arr = @[@"lnj", @"lmj", @"jjj"];

如何将数组中每个元素拼接成字符串

方法一:

// 1.定义一个可变字符串保存拼接之后的结果NSMutableString *strM = [NSMutableString string];// 2.遍历数组, 取出数组中的每一个元素, 将元素添加到可变字符串中for (NSString *str in arr) {    [strM appendString:str];    // 3.每次添加完毕之后再添加一个-    [strM appendString:@"-"];}[strM deleteCharactersInRange:NSMakeRange(strM.length - 1, 1)];NSLog(@"strM = %@", strM);

 

 

方法二:

//把数组元素链接成字符串,用**作拼接符将数组元素拼接成一个字符串NSString *str = [arr componentsJoinedByString:@"**"];NSLog(@"str = %@", str);

 

如何通过一个字符串生成一个数组

字符串分割方法

NSString *str = @"lnj**lmj**jjj";NSArray *arr = [str componentsSeparatedByString:@"**"];NSLog(@"arr = %@", arr);

 

5.NSArray文件读写

如何将数组写入文件中

NSArray *arr = @[@"lnj", @"lmj", @"jjj"];BOOL flag = [arr writeToFile:@"/Users/xiaomage/Desktop/abc.plist" atomically:YES];NSLog(@"flag = %i", flag);

 

将数组写入文件中,有什么注意点

  • 注意1:如果将一个数组写入到文件中之后, 本质是写入了一个XML文件 在iOS开发中一般情况下我们会将XML文件的扩展名保存为plist
  • 注意2:writeToFile只能写入数组中保存的元素都是Foundation框架中的类创建的对象, 如果保存的是自定义对象那么不能写入

如何从文件中读取数据到NSArray中

  • 从文件中读取一个数组,此方法在字典转模型中,经常用到
NSArray *newArray = [NSArray arrayWithContentsOfFile:@"/Users/xiaomage/Desktop/abc.plist"];NSLog(@"%@", newArray);

 

 

6.NSMutableArray

可变数组 增删改查

什么是可变数组?和NSArray有什么区别

  1. NSMutableArray是NSArray的子类
  2. NSArray是不可变的,一旦初始化完毕后,它里面的内容就永远是固定的, 不能删除里面的元素, 也不能再往里面添加元素
  3. NSMutableArray是可变的,随时可以往里面添加\更改\删除元素

如何创建一个空的数组?创建可变数组有什么注意点?

1.创建空数组

NSMutableArray *arrM = [NSMutableArray array];

NSMutableArray *arrM = [[NSMutableArray alloc] init];

2.注意点:

  • 不能通过@[]来创建一个可变数组, 因为@[]创建出来的是一个不可变的数组
  • 如果把一个不可变数组当做一个可变数组来使用, 会引发一个运行时的错误

例如:

NSMutableArray *arrM = @[@"lnj", @"lmj"];[arrM addObject:@"JJJ"];

 

如何给可变数组增加内容 方法一:

[arrM addObject:@"lnj"];

 

 

方法二:

// 将指定数组中的元素都取出来, 放到arrM中 \    并不是将整个数组作为一个元素添加到arrM中[arrM addObjectsFromArray:@[@"lmj", @"jjj"]];// 注意: 以下是将整个数组作为一个元素添加//    [arrM addObject:@[@"lmj", @"jjj"]];NSLog(@"%@", arrM);

 

 

如何给可变数组插入内容

[arrM insertObject:@"xcq" atIndex:1];NSRange range = NSMakeRange(2, 2);NSIndexSet *set = [NSIndexSet indexSetWithIndexesInRange:range];// 插入一组数据, 指定数组需要插入的位置, 和插入多少个[arrM insertObjects:@[@"A", @"B"] atIndexes:set];

 

 

如何删除可变数组中的内容

删除指定元素:

[arrM removeObjectAtIndex:0];

删除数组中最后一个元素

[arrM removeLastObject];

删除index位置的元素

[arrM removeObject:@"A"];

如何替换可变数组中的内容

[arrM replaceObjectAtIndex:1 withObject:@"M"];//简写:arrM[0] = @"ZS";NSLog(@"%@", arrM);

 

 

如何获取可变数组中的内容

NSLog(@"%@", [arrM objectAtIndex:0]);

 

 

转载于:https://www.cnblogs.com/dreamWanweidong/p/4998716.html

你可能感兴趣的文章
yaml文件 .yml
查看>>
linux字符集修改
查看>>
phpcms 添加自定义表单 留言
查看>>
mysql 优化
查看>>
读书笔记 ~ Nmap渗透测试指南
查看>>
WCF 配置文件
查看>>
动态调用WCF服务
查看>>
oracle导出/导入 expdp/impdp
查看>>
类指针
查看>>
css修改滚动条样式
查看>>
2018.11.15 Nginx服务器的使用
查看>>
Kinect人机交互开发实践
查看>>
百度编辑器UEditor ASP.NET示例Demo 分类: ASP.NET...
查看>>
JAVA 技术类分享(二)
查看>>
android客户端向服务器发送请求中文乱码的问
查看>>
Symfony翻译教程已开课
查看>>
TensorFlow2.0矩阵与向量的加减乘
查看>>
NOIP 2010题解
查看>>
javascript中的each遍历
查看>>
String中各方法多数情况下返回新的String对象
查看>>