1.OC的数组成员是任意的对象指针 与C中的链表结构类似(以nil结尾) 一切的数组操作不能
越界
OC的数组分为不可变数组 NSArray 可变数组 NSMutableArray
01 | NSArray * array = [[NSArray alloc]initWithObjects:@ "one" ,@ "two" ,@ "three" , nil]; |
02 | NSLog(@ "%@" ,[array objectAtIndex:0]); //通过下标获取数组成员(下标从0开始) |
03 | NSLog(@ "%ld" ,[array count]); //获取数组有效成员个数 (不包括nil) |
04 | for (i = 0; i < [array count]; i++) { //遍历数组(C方法) |
05 | NSLog(@ "%@" ,[array objectAtIndex:i]); |
06 | } |
07 | NSLog(@ "%@" ,array); //(OC)查看数组内容(先给array发送description消息,然后给每个成员都发送一个description消息) |
08 | NSArray * array1 = [[NSArray alloc]initWithArray:array]; //创建数组对象 相当于拷贝 |
09 | NSArray * arry2 = [NSArray arrayWithArray:array]; //创建数组对象 相当于拷贝 |
10 | NSEnumerator * enumer = [array objectEnumerator]; //正序枚举器 |
11 | //创建一个枚举器 把数组的每个元素的地址一次赋给枚举器,然后建立起某种关联 (枚举器只能用来读数组成员) |
12 | //枚举时 会和数组创建某种关联(修改监视器/迭代器) 限制枚举的同时不能修改元素 只能读不能写 |
13 | id obj; |
14 | //第一次循环把数组的第一个元素赋给obj 第二次循环把第二个数组元素赋给obj |
15 | while (obj = [enumer nextObject]) { //遍历数组 |
16 | NSLog(@ "%@" ,obj); |
17 | } |
18 | //快速枚举 第一次循环把array的第一个元素赋给ob 第二次循环把array的第二个元素赋给ob 直到nil(只能读不能改) |
19 | for (id ob in array){ |
20 | NSLog(@ "%@" ,ob); |
21 | } |
22 | //逆序输出数组(创建逆序枚举器 第一次循环把最后一个元素赋给obj ) |
23 | NSEnumerator * enumer1 = [array reverseObjectEnumerator]; |
24 | while (obj = [enumer1 nextObject]) { |
25 | NSLog(@ "%@" ,obj); |
26 | } |
27 | if ([obj isKindOfClass:[Dog class ]]) //获取类的类型 判是否是指定类的对象 |
28 | if ([obj isMemberOfClass:[Dog class ]]) { |
29 | } |
2.不可变数组
01 | -------查找 |
02 |
03 | NSArray * array = [[NSArray alloc]initWithObjects:@ "one" ,@ "two" ,@ "three" ,@ "one" , nil]; |
04 |
05 | NSUInteger index = [array indexOfObject:@ "one123" ]; //返回第一个找到的数组成员对应的下标 找不到返回NSNotFound |
06 |
07 | index = [array indexOfObject:@ "one" inRange:NSMakeRange(1, 3)]; //在指定范围内查找 |
08 | if (index != NSNotFound) { |
09 | NSLog(@ "%ld" ,index); |
10 | } |
11 | ----抽取 组成新的数组 |
12 | NSArray * array1 = [array objectsAtIndexes:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(1, 3)]]; |
13 | 《数字集合》 |
14 | NSIndexSet这是个数字集合类 |
15 | [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(1, 3)]产生一个数字集合 |
3.可变数组
01 | NSMutableArray * array = [[NSMutableArray alloc]initWithObjects:@ "one" ,@ "two" ,@ "three" ,@ "four" , nil]; |
02 | [array addObject:@ "five" ]; //在数组尾部插入元素 |
03 | [array insertObject:@ "six" atIndex:5]; //在数组指定下标位置插入元素(不能越界,最大值为length) |
04 |
05 | [array removeObject:@ "six" ]; //删除指定元素(数组中出现的所有位置都将被删除) |
06 | [array removeObject:@ "two" inRange:NSMakeRange(0, 3)]; //从指定下标位置开始的指定长度内删除指定元素 |
07 | [array removeLastObject]; //删除最后一个元素 |
08 | [array removeAllObjects]; //删除所有元素 |
09 | |
10 | [array replaceObjectAtIndex:3 withObject:@ "ios" ]; //将指定下标位置元素替换为指定的元素 |
11 | [array exchangeObjectAtIndex:0 withObjectAtIndex:3]; //将指定下标的两个元素进行交换 |
4.字符串分割与拼接
01 | //@"" 空的字符串对象 |
02 | -------分割 |
03 | NSString * ptr = @ "I am a man" ; |
04 | NSArray * array = [ptr componentsSeparatedByString:@ " " ]; //将字符串整体作为分割条件 返回值为NSArray不可变数组 |
05 | NSMutableArray * array1 = [NSMutableArray arrayWithArray:array]; //若修改,则将NSArray转化为NSMutableArray |
06 | NSArray * array2 = [ptr componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@ ", " ]]; //以字符串中的字符作为分割条件进行分割 |
07 | 《字符集合》 |
08 | NSCharacterSet 这是个字符集合类 |
09 | [NSCharacterSet characterSetWithCharactersInString:@ ", " ] //把字符串转化为字符集合 |
10 | -------拼接 |
11 | NSString * str = [array componentsJoinedByString:@ " " ]; |
12 |
13 | 若分割条件出现在开头或者结尾,则会出现空串@ "" ,如果不需要,则需要转化成NSMutableString对空串进行处理 |
14 | func1: [array1 removeObject:@ "" ]; //找到空串直接删除 |
15 | func2: for (id obj in array1){ |
16 | if ([obj length] == 0) //空串的长度为0 |
17 | if ([obj isEqualToString:@ "" ]) //与空串进行比较(字符串是不能进行==比较的,要使用函数) |
18 |
|