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、数组不能直接存储基本数据类型: char, int, shot, long…..

3、 数组分为两种: 可变数组, 不可变数组;      NSArray不可变数组类, NSMutableArray是可变数组类;

区别:

C数组里面存储基本数据类型;

OC数组里面存储的是对象;

2.【需要记住的知识】

不可变数组的类名: NSArray

2、如何创建一个数组

2.1、

通过对象来创建:

NSArray *arr1 = [[NSArray alloc] initWithObjects:@"string1", @"string2", @"string3", nil];

通过一个数组了创建

NSArray *arr2 = [[NSArray alloc] initWithArray:arr1];

//通过类的方法创建

通过对象来创建:

NSArray *arr3 = [NSArray arrayWithObjects:@"字符串1", @"字符串2", @"字符串3", nil];

通过一个数组了创建

NSArray *arr4 = [NSArray arrayWithArray:arr2];

2.2、Objective-c 2.0 新特征

从Xcode4.6以后,允许用类似c数组方式创建数组,仅适用于不可变数组

@[对象1, 对象2, 对象3.....];

NSArray *arr5 = @[@"string1", @"string2", @"string3"];

2.4、创建一个空对象

NSNull *nilObject = [NSNull null];

==========================================================

3.数组的元素是什么

1)数组元素可以是任意对象

练习:1.用三种方式创建一个包含3个字符串对象的数组

===========================

NSArray常用方法

1、获取数组元素个数

NSUInteger count = [array count];

2、通过索引号获取相应的元素(2种)   (重要)       NSString *s = [array objectAtIndex:0];

NSString *s1 = array[1];

3、取出最后一个元素

NSLog(@"%@",[array lastObject]);

4、通过对象获取在数组中的下标

NSLog(@"%li",[array indexOfObject:@"string1"]);

5、判断数组中数组包含元素anObject

BOOL ret = [array containsObject:@"string4"];

===================================

5、如何取出数组中的一部分元素   sub****

1)subarrayWithRange消息

作用:取出数组中指定范围内range的元素

//6-1、 根据范围获取子数组(一部分数组元素);

NSRange range = NSMakeRange(1, 3);

NSArray *subArray = [array subarrayWithRange:range];

NSLog(@"%@", subArray);

2)objectsAtIndexes消息

作用:从数组中获取指定下标的元素

//6-2、根据下标来获取子数组:

// 整数集合对象;

NSMutableIndexSet *indexSet = [[NSMutableIndexSet alloc] init];

[indexSet addIndex:0];

[indexSet addIndex:2];

[indexSet addIndex:4];

NSArray *subArray2 = [array objectsAtIndexes: indexSet];

练习:

1.设计一个人类,方法有speak说话,创建一个人对象p1;

设计一个狗类,方法有bark叫,创建一条狗对象d1;

创建一个数组,存储一个字符串对象,一个人对象,一条狗对象;

通过循环判断该数组内的元素的类型,

如果是人,调用方法speak;

如果是狗,调用方法bark;

如果是字符串,直接输出;

2.创建一个数组,NSArray *arr = @[@“1”,@“2”,@“3”,@“4”,@“5”,@“6”,@“7”,@“8”,@“9”,@“10”];

取出该数组中下标能整除3的元素来组成一个新的数组,并且输出;

===========================

NSArray数组的遍历

回忆:如何在c语言中遍历一个数组的所有元素

1、通过下标遍历数组

for (NSInteger i = 0; i < [arr count]; i++) {

NSLog(@"%@", arr[i]);

}

2、NSEnumerator  枚举器

1)objectEnumerator消息

作用:正序输出所有元素

NSEnumerator *enumertor = [arr objectEnumerator];

2)reverseObjectEnumerator消息

作用:逆序输出所有元素

NSEnumerator *revertor = [arr reverseObjectEnumerator];

3、快速枚举法

1)for in 语法

for (NSString *s in arr) { // 把arr数组里面每一个对象一个一个地获取出来;

NSLog(@"%@", s);

}

练习:1.找出数组中长度最长的字符串

2.找出数组中长度最短的字符串

数组的总结:

1,数组也是一个对象   (NSArray类创建数组对象)

2,不可变数组一旦创建,数组的元素个数和元素内容和元素顺序都是不可以改变的

3,数组中的元素,可以是任意类型的对象,不单纯可以是字符串,包括数组对象, 人对象, 狗对象。。。。。

4,数组中存放的元素是对象的地址

5,数组可以用NSLog(%@)来打印,会打印出数组的每个元素

=====================================

NSMutableArray 和 NSArray   (上述讲的NSArray的方法,都可以在NSMutableArray对象使用)

NSMutableArray 继承 NSArray;

1.NSMutableArray的作用  存储对象; (增删改)

2.如何创建一个NSMutableArray

1)通过arrayWithCapacity创建

是一个参考容量,数组会根据实际的元素变换长度

2)通过alloc创建

============================

NSMutableArray   (增删改)

1、增加数组元素

添加元素

[arrM addObject:@"lixiaolong"];

从一个数组添加对象

[arrM addObjectsFromArray:@[@"zhangsan", @"lisi", @"laowang"]];

insert****

1)如何插入一个元素

[arrM insertObject:@"zhizhuxia" atIndex:2];

2) 插入多个元素

NSMutableIndexSet *index = [[NSMutableIndexSet alloc] init];//空整数集合对象

[index addIndex:0];

[index addIndex:2];

[index addIndex:3];

[arrM insertObjects:@[@"one", @"two", @"three"] atIndexes:index];

// 对象个数 和 整数个数要一致相等;

2、如何删除元素        remove*****

1)删除指定下标的元素

[arrM removeObjectAtIndex:1];

2) 删除最后一个元素

[arrM removeLastObject];

3)根据指定对象来删除元素

[arrM removeObject:@"lisi"];

4)在一定范围删除指定的元素

[arrM removeObject:@"zhangsan" inRange:NSMakeRange(0, 4)];

5)删除指定范围的所有元素:

[arrM removeObjectsInRange:NSMakeRange(3, 2)];

6)根据一个数组删除指定的元素

[arrM removeObjectsInArray:@[@"1",@"2",@"3", @"one"]];

7)一次性删除所有指定下标的元素

NSMutableIndexSet *index

[arrM removeObjectsAtIndexes:index];

8)删除所有元素

[arrM removeAllObjects];

总结:

增:  add*****,  insert*****

删: remove*****

练习:

1.创建一个可变数组,数组中包含若干不相同的字符串,要求将指定的字符串删除

2.创建一个数组,数组中包含若干不相同的字符串,要求将下标整除3 的元素全部删除

3.先定义一个Person类,包含一个成员变量:no,随机产生no报数

如果数组中的人的下标能整除报数, 则出列(remove)

arc4random(); // 产生随机数;

5、交换数组内的两个元素: exchangeObjectAtIndex: withObjectAtIndex

[arrM exchangeObjectAtIndex:0 withObjectAtIndex:2];

练习:

1.将数组内的元素逆序保存

@[@“1”, @“2”, @“3”, @“4”, @“5”]

@[@“5”,@“4”,@“3”,@“2”,@“1”];

6、替换元素

1)1.替换一个元素replaceObjectAtIndex:withObject:

[arrM replaceObjectAtIndex:0 withObject:@"three"];

2. 替换多个元素 replaceObjectsAtIndexes:withObjects:

[arrM replaceObjectsAtIndexes:index withObjects:@[@"four",@"one"]];

3. setArray:全部修改

[arrM setArray:@[@"fire"]];

总结:

增: add****, insert*****

删: remove******

改: replace****, exchange****  , set***** (全部改为....)

===========================

字符串的分割与拼接

1.如何分割字符串  "+"  “hello_world+ddd”

1)componentsSeparatedByString消息

作用:将字符串按照指定的字符串进行分割

2)componentsSeparatedByCharactersInSet消息

作用:使用指定的NSCharaterSet集合来分割字符串

注意:若分割条件出现在开头或者结尾,则会出现空串@""

2.NSCharacterSet集合的使用与NSIndexSet的区别

需求:现在需要将一个字符串按照数字分割

1) NSCharacterSet作用

NSCharacterset是无序字符集合,

主要用来判断已知字符串是否包含制定字符集,而不可以用来保存字符串

2)characterSetWithCharactersInString消息

作用:根据指定字符串中的字符构建一个NSCharaterSet集合

3.字符串拼接

1)componentsJoinedByString消息

作用:每个元素间以指定的字符串进行连接

示例:时间,句子…

练习:

将字符串@ “I am a man” 和 @”You are so good";

组合成@“I You am are a so man good”

===========================

NSNumber的作用

需求:OC的数组无法放入C语言的基本数据类型

作用:把C语言的基本数据类型转换成NSNumber对象

=============================

8、NSMutableArray数组排序

1)数组排序方法

//按照ASC码大小进行排序

//提供一个排序的方法,使数组自动按照排序方法的法则进行排序

NSArray *arr1 = [arr sortedArrayUsingSelector:@selector(compare:)];

============================

作业:

1.根据字符串的长度对数组进行排序  (冒泡升序)(选择降序)

2:创建一个数组,元素是5个Dog 类的对象地址,遍历数组,是每个元素都执行bark函数

bark函数可以打印出dog 的姓名和年龄

3:创建一个数组,数组中有三个Cat 的对象,有三个Dog 的对象,用三种方式来遍历数组,如果是Cat 的对象就发送wash 的消息,打印“小猫在洗脸”,如果是Dog 的对象,就给对象发送bark 的消息,打印狗叫声

4:创建一个Dog的类,重写类的description方法,打印出一句话

时间: 2024-09-30 11:20:25

Objective-C 数组与可变数组的相关文章

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

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

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

#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 NSArray不可变数组和NSMutableArray可变数组

OC中存储数据最常用 的两个容器就是数组和字典,而作为最常用的,应该了解这所有的特点,及用法. OC中的数组是一个容量,有序的管理了一系列元素,并且存放在数组里的元素,必须是对象类型. 不可变数组,见名知意,不可改变的,只要创建成功之后都不能改变数组容量,元素. 创建一个不可变数组对象 //1.初始化方法(多个对象用逗号隔开,并且最后一个对象与nil之间也要有逗号) NSArray *array1 = [[NSArray alloc] initWithObjects:@"zhonger"

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

NSArray与NSMutableArray 数组与可变数组

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

iOS objective-c之-8:数组NSArray 可变数组-(NSMutableArray)

镔哥自己了一些数组方法,网上又查了些方法出来,应该是比较全面的. 下面的例子以 NSArray *array = [NSArray arrayWithObjects:@"wendy",@"andy",@"tom",@"jonery",@"stany", nil]; 1.获取数组中总共有多少个对象. - (NSUInteger)count; NSLog(@"%d",[array count

不可变数组和可变数组

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

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

原文网址:http://www.jianshu.com/p/1ad327f56d1d 不可变数组NSArray //创建一个空数组 NSArray *array = [NSArray array]; //这样创建是没有意义的. //创建只有一个元素的数组 NSArray *array1 = [NSArray arrayWithArray:@"a"]; NSArray *array2 = [NSArray arrayWithObject:@"b"]; //使用便利构造

不可变数组NSArray和可变数组NSMutableArray区别和用法

下面是相关的代码实现: #import <Foundation/Foundation.h> #import "Person.h" /* NSArray :不可变数组 NSMutableArray : 可变数组 */ int main() { // @[] 只创建不可变数组NSArray /* 错误写法 NSMutableArray *array = @[@"jack", @"rose"]; [array addObject:@&quo