NSArray与NSMutableArray

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的类型可以根据数组中元素的类型来写, 不一定要写NSObject
for (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]);
时间: 2024-10-09 22:53:06

NSArray与NSMutableArray的相关文章

Foundation框架中NSArray和NSMutableArray

=================== NSArray ====================(不可变数组,一旦建立就不能被更改) Ordered collection of objects. Immutable(you cannot add or remove objects to it once it’s created)Important methods:+ (id)arrayWithObjects:(id)firstObject, ...;    // nil terminated -

[Objective-C] 008_Foundation框架之NSArray与NSMutableArray

在Cocoa Foundation中NSArray和NSMutableArray 用于对象有序集合,NSArray和NSMutableArray类最大的区别是:NSArray是不可变,NSMutableArray是可变的.它们只能存储Cocoa对象(NSObject对象),如果想保存一些原始的C数据(如:int,float,double,BOOL等),则需要将这些原始的C数据封装NSNumber类型,它们的下标是从0开始,下面是NSArray和NSMutableArray类的一些常用初级操作.

NSArray与NSMutableArray 数组与可变数组的创建和遍历 复习

1.NSArray 是一个父类,NSMUtableArray是其子类,他们构成了OC的数组. 2.NSArray的创建 NSArray * array = [[NSArray alloc]initWithObjects:@"one",@"two",@"three",@"four good",nil];//用对象初始化一个数组,这里是任意四个对象,不一定是字符串.//OC中的数组,不是真正的数组,这是一个链表,nil的作用正是表

NSArray,NSMutableArray的一些常用方法

不可变数组 --NSArray 常用的初始化一个数组:       NSArray *array1 = [[NSArray alloc] init];       NSArray *array2 = [NSArray array]; //对于上述两个方法,在NSArray中用的很少,因为这是一个空数组,它的值是不可改变的,意味着一旦创建,就永远为空       NSArray *array3 = [NSArray arrayWithObjects:[NSNumber numberWithInt:

Objective-C 下用 NSArray 和 NSMutableArray 定义二维数组跟多维数

Objective-C 下用 NSArray 和 NSMutableArray 定义二维数组跟多维数组 目录 问题描述 Objective-C 中的数组对像 NSArray 和 NSMutableArray 简介 二维数组:嵌套两次的 NSMutableArray 多维数组:嵌套多次的 NSMutableArray 问题描述 说实话,不太习惯面向对象编程,所以在操作 Objective-C 中数组对象时,总是忍不住跟 C 中的数组做比较,正好要建立一个二维数组,需要根据二维数组的下标来做相应的设

OC中的NSArray和NSMutableArray、NSDictionary和NSMutableDictionary用法

一:NSArray 和NSMutableArray 1: NSArray:不可变数组 NSArray是OC中使用的数组,只能用来存放OC对象,不能存放非OC对象如基本数据类型 它使不可变的,一旦初始化完毕,内容不能改变,也不能添加元素. 而C语言中的数组只能存放一种数据类型 (1) 普通数组的用法 // 普通数组的创建 // int arr[5] = {1,3,4}; // 对象数组的创建 // Person *p = [[Person alloc] init]; // Person *arrP

NSArray和NSMutableArray相互转换, 以及常用方法-备

有时候项目中NSArray和NSMutableArray需要相互转化,下面给出相关代码1.NSArray 1.1 转化:NSMutableArray 1 NSMutableArray *mutableArray = [NSMutableArray arrayWithArray:array]; // array为NSMutableArray类型 1.2 常用方法 不可变数组对象: [array count] : 得到这个对象数组的长度. [array objectAtIndex 0]: 传入数组脚

NSArray 和NSMutableArray的区别

1.NSArray 创建的是静态数组,一旦创建之后,就再也不能添加和删除数组中的对象了. NSArray * array; array = [ NSArray arraryWithObjects: @"one", @"two", @"three",nil     ] ; 2.NSMutalbeArray 创建的是动态数组,可随意添加或删除数组中的元素. 在iOS 开发过程中, NSArray,NSMutableArray.NSDictionary

IOS数组NSArray与NSMutableArray知识点

此文是对数组NSArray与NSMutableArray知识点的总结,主要是一些常见的操作,别外一些操作见其相应的文档,下面的代码部分还运用的第三方插件BlocksKit相结合: a:Foundation中数组(NSArray)是有序的对象集合 b:NSArray只能存储Objective-C的对象,而不能存储像int.float这些基本数据类型,但是Objective-C对C兼容,所以在Objective-C程序中,仍然可以使用C的数组来存储基本数据类型 c:NSArray一旦创建便不可以再对

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

IOS学习(OC语言)知识点整理 一.OC中的数组 1)数组:也是一个对象,数组中存放的是对象的地址,可以存放任意类型对象的地址,只能是对象不能是具体的数值,数组是有序的,      可以存放重复的元素,数组也分为不可变数组和可变数组.       1.不可变数组NSArray:初始化之后不能修改数组的内容       2.可变数组NSMutableArray:可以随时修改数组的内容(增加元素.删除元素.修改元素) 二.NSArray数组的操作 1)NSArray数组的创建 1.创建方法一:使用