码迷,mamicode.com
首页 > 编程语言 > 详细

Objective-C 数组与可变数组

时间:2016-01-03 22:22:17      阅读:1591      评论:0      收藏:0      [点我收藏+]

标签:

 

 

 

知识点

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方法,打印出一句话

 

Objective-C 数组与可变数组

标签:

原文地址:http://www.cnblogs.com/-Lim/p/5097235.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!