Objective-C 数组与可变数组

 

 

 

知识点数组

1.NSArray 类的重点函数使用dom

2.NSMutableArray 类的重点函数使用 3.字符串的分割和拼接函数

============================spa

 

NSArray,    NSMutableArray设计

 

1.【须要理解的知识】code

1.1 C语言中数组component

 

一、 相同数据类型的集合; 对象

 

int a[10];排序

float b[20];继承

char c[30];

 

二、 数组地址是连续; 

 

 

一、OC数组和c数组的区别

一、NSArray是个类 数组是对象; 存储也是对象; 

二、数组不能直接存储基本数据类型: char, int, shot, long….. 

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

 

 

区别:

 

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

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

 

 

     

 

2.【须要记住的知识】

 

不可变数组的类名: NSArray

 

 

 

二、如何建立一个数组

2.一、

 

 

经过对象来建立:

        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.二、Objective-c 2.0 新特征

 

 

从Xcode4.6之后,容许用相似c数组方式建立数组,仅适用于不可变数组

 

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

 

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

 

 

    2.四、建立一个空对象   

 

        NSNull *nilObject = [NSNull null];

 

 

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

 

3.数组的元素是什么

  1)数组元素能够是任意对象

 

 

 

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

 

 

 

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

 

NSArray经常使用方法

一、获取数组元素个数

 

NSUInteger count = [array count];

 

 

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

        NSString *s1 = array[1];

 

 

三、取出最后一个元素

 

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

 

 

 

     四、经过对象获取在数组中的下标

 

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

 

 

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

 

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

 

 

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

 

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

  1)subarrayWithRange消息

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

        

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

        NSRange range = NSMakeRange(1, 3);

        NSArray *subArray = [array subarrayWithRange:range];

        NSLog(@"%@", subArray);

 

 

  2)objectsAtIndexes消息

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

 

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

        // 整数集合对象;

        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语言中遍历一个数组的全部元素

 

一、经过下标遍历数组

 

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

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

        }

 

二、NSEnumerator  枚举器

  1)objectEnumerator消息

    做用:正序输出全部元素

        NSEnumerator *enumertor = [arr objectEnumerator];

 

  2)reverseObjectEnumerator消息

    做用:逆序输出全部元素

 

  NSEnumerator *revertor = [arr reverseObjectEnumerator];

 

 

 

三、快速枚举法

  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   (增删改)

 

一、增长数组元素

添加元素

 

        [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];

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

 

 

二、如何删除元素        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(); // 产生随机数;

 

 

 

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

        [arrM exchangeObjectAtIndex:0 withObjectAtIndex:2];

 

 

  

练习:

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

 

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

 

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

 

 

 

 

六、替换元素

  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对象

 

 

 

 

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

 

 

 

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

相关文章
相关标签/搜索