NSArray与NSMutableArray 数组与可变数组

1.NSArray 是一个父类,NSMUtableArray是其子类,他们构成了OC的数组。
2.NSArray的创建
NSArray * array = [[NSArray alloc]initWithObjects:@"one",@"two",@"three",@"four good",nil];
//用对象初始化一个数组,这里是任意四个对象,不一定是字符串。
//OC中的数组,不是真正的数组,这是一个链表,nil的作用正是表明结尾。
3.NSArray的遍历打印
   我们在C语言中,要打印一个数组,要使用循环进行输出,但是在OC中我  们完全可以直接打印,而不通过循环。
NSLog(@“%@”,array);//这里可以直接打印出数组的内容,如果打印的字符串超过一个单词,在输 出时会加双引号。
{
one,
two,
three,
"four good"
}//OC自加花括号,来表明这是打印一个数组。
4.以一个数组初始化另外一个数组
NSArray * array2= [[NSArray alloc]initWithArray:array1];
//利用数组2 来初始化数组1,数组1中的元素与2 相同
//数组的每个元素是任意对象ID类型,因为数组实际上是一链表,所以不   要求数组的每个元素类型完全相同。
5.与NSString相同,alloc init 版本对应着一个arrayWithObjects版本
NSArray * array1 = [NSArray arrayWithObjects:@"1",@"2",@"3",@"4", nil];
6.OC中可以使用一个数组的范围内的元素生成另外一个数组,如下:
NSArray * array1 = [array objectsAtIndexes [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(1, 3)]];
//集合的元素是从1开始 3个元素,红字部分函数返回一个数字集合的对象,集合元素是1,2,3,
6.查找数组的某个节点
    从数组中去一个元素时要retain,因为数组可能是可变的,其他时候可能执  行了delete等操作,使该对象无法引用,使用完时,同样要release。
NSArray * str =[[array objectAtIndex:1]retain];
//取数组位置为1的字符串
7.遍历的牛逼作用
(1)枚举器法(传入类的对象作为数组的元素)
NSEnumerator * enumerator = [array ObjectEnumerator];//数组对象创建一个枚举器
id obj;//创建一个id类型的对象
while (obj=[enumerator nextObject]) {
NSLog(@"%@",obj);}
//循环的第一次,nextObject函数返回数组的元素0,第二次返回1,以此类推。
枚举器法可以实现逆序遍历,这是快速枚举法不可替代的。
NSEnumerator * enumerator = [array reverseObjectEnumerator];
除了创建枚举器,别的地方都与正序无区别。
(2)快速枚举法
相比枚举器法,快速枚举法显得更加简洁
for(id obj in array)
{
NSLog(@"%@",obj);
}//循环的第一次,obj是结点0的地址,第二次是结点1的地址。
8.NSMutableArray 可变数组,数组元素是可变的,类似NSMUtableString。因为其可变性,所以可以对各节进行操作。
NSMutableArray * array = [[NSMutableArray alloc]initWithObjects:@"one",@"two",@"three",nil];
//数组的声明同普通数组类似,但是我们可以对数组,进行添加结点,删除 结点等操作。
8.添加结点
[array addObject:@"four"];//添加结点非常简单,没有字符串的各种区分
9.删除结点
[array removeObjectAtIndex:1];//根据指数,删掉的是@”two”
[array removeObject:@”Four”];//根据某个结点的地址,删除对应的结点
[array removeObject:[array objectAtIndex:0] inRange:NSMakeRange(1, 4)];
//在某个范围内(1,4),删除与地址0位置相同地址的结点
[array removeObject:@”one” inRange:NSMakeRange(2, 3)];
//从2开始3个节点内,如果有地址和@”one”相同的结点,删除
//在(2.3)范围内,查找@”one”并删除
后两个函数作用相同,只是写法不同而已。
10.NSString的分割
将字符串分割,然后将分割后的字符串一次存入一个动态数组中。类似C语 言中的strtok。
NSString * str = @"I am a so bad man.";
NSArray * array = [str componentsSeparatedByString:@" "];
//以空格为标准进行字符串分割,操作后,原字符串不变,只是生成了一堆 字符串,装在一个数组中,达到分割的目的。
 Strtok()有一强大的作用,是这个函数不能比拟的,strtok(p," ,")此时可以分 别以空格和","来进行字符串分割,以上函数就不能达到这个作用。我们需要字符合集来解决这问题。
NSArray *array = [str componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@" ,"]];
//红字部分是创造一字符串集合,以字符串集合为参数进行分割
11.字符串拼接
将字符串分割,同样可以将分割后的字符串重新拼接
NSString * str2 = [array componentsJoinedByString : @” ”];
//把数组中的字符串拼接在一起,中间空格隔开,形成新的字符串str2
12.字符串交换
[array exchangeObjectAtIndex:0 WithObjectAtIndex:array.count-1];
//交换两个位置的结点,array.count-1 意思是最后一个结点
14.数组排序
[array sortUsingSelector:@selector (oldThanDog:)];
//oldThanDog这个函数为BOOL型函数,实际上是返回YES或者NO来控   制排序。
//这个函数可以排序,但是不知道排序的准则,这里的BOOL型函数实际上 是自写的函数,通过返回值规定排序的原则。
14.seletor 选择器
SEL型变量实际上可以看做一函数指针。
我们可以将函数,抽象成SEL变量来满足我们的需求。
在编写代码的时候,不能确定某一部分引用哪个函数的时候,我们可以引用 SEL型变量[dog performselector:sel] 来调用函数,这里的sel是对某函数抽象化SEL的结果。
对于带参的SEL,我们这样处理。
[str performSelector :sel withObject:str2 ];
//红字部分,就是函数带参SEl类型的处理方式

本文出自 “CoderToDeveloper” 博客,请务必保留此出处http://rongchengfei.blog.51cto.com/6269699/1086045

时间: 2024-10-10 10:42:11

NSArray与NSMutableArray 数组与可变数组的相关文章

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

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

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

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

不可变数组或者可变数组进行排序

#import <Foundation/Foundation.h> NSInteger myCompare(id obj1,id obj2,void *context) { //不分大小写进行升序排序 //return [obj1 caseInsensitiveCompare:obj2]; return -[obj1 caseInsensitiveCompare:obj2]; } int main(int argc, const char * argv[]) { @autoreleasepoo

Objective-C 数组与可变数组

知识点 1.NSArray 类的重点函数使用 2.NSMutableArray 类的重点函数使用 3.字符串的分割和拼接 ============================ NSArray,    NSMutableArray 1.[需要理解的知识] 1.1 C语言中数组 1. 相同数据类型的集合: int a[10]; float b[20]; char c[30]; 2. 数组地址是连续; 1.OC数组和c数组的区别 1.NSArray是个类 数组是对象: 存储也是对象: 2.数组不能

Objective-C 数组、可变数组

数组的使用方式 下面是数组:类型NSArray 1 #import <UIKit/UIKit.h> 2 #import "AppDelegate.h" 3 4 int main(int argc, char * argv[]) { 5 6 // 通过@符号创建数组 7 NSArray *arr = @[@"Hello",@"jinpangpang"]; 8 9 // 通过工厂方法创建数组 10 NSArray *arr2 = [NSA

不可变数组和可变数组

1.数组的特点: 1)可以储存多个数据: 2)储存的多个数据的类型要相同: 3)储存在数组中的数据非常方便管理: 2.什么时候使用数组 当我们有多个类型相同的数据,并且这些数据的意义是一样的,需要储存的时候,就可以使用数组: =================== NSArray ==================== Ordered collection of objects. Immutable(you cannot add or remove objects to it once it’

oc学习之NSArray与NSMutableArray数组

//创建数组对象,NSArray不可变数组 //[NSNull null]空对象 //NSArray *arr = [[NSArray alloc] initWithObjects:@"234",@"543",@"asb",nil]; NSArray *arr1 = @[@"1 2 3",@"234",[NSNull null],@"789"]; NSArray *arr3 = [[NS

Objective-C学习-数组 NSArray 和 NSMutableArray(欢迎提意见)

在学习 Objective-C的过程中,感觉数组在这一个学习方面是一个比较大的应用域,所以写这篇随笔来总结一下. 首先声明的是,与C语言的数组不同,Objective-C的是数组只能用来存储对象,而不是存储int .double.char等基础数据类型,一般要存这些基础数据类型,对于我这个刚学 Objective-C的新手来说,我的做法是将有关数字的基础类型 如 int .double.char首先转换成一个叫做 NSNumber的类  char*类型的转换成  Objective-C的字符串

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

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