1、OC数组和c数组的区别
C语言的数组:
相同类型变量的有序结合。 类型:可以是简答数据类型、构造数据类型
int a[10];
int *p[10];
1)NSArray是一个对象,是任意类型对象地址的集合
不能存放简单的数据类型(int, float, NSInteger…)
除非通过一些手段把简单数据类型变成对象。
2)C数组可以保存任意类型的数据
3)NSArray下标越界不会有警告,但是运行会直接报错
2、如何创建一个数组
2.1、
//通过类的方法创建
arrayWithObjects :消息
作用:通过指定对象创建一个数组
[NSArray arrayWithObjects:id, id, nil];
arrayWithArray: 消息
作用:通过已存在的数组创建一个数组
[NSArray arrayWithArray:array];
//通过对象的方法创建
initWithObjects: 消息
作用:通过指定对象创建一个数组
[[NSArray alloc] initWithObjects:(id), …(id), nil]
initWithArray: 消息
作用:通过已存在的数组创建一个数组
[[NSArray alloc] initWithArray:<#(NSArray *)#>]
2.2、Objective-c 2.0 新特征
NSArray *array4 = @[@"one one", @"two two"];
2.3 、arrayWithObjects:count
将一个c类型的对象数组转换为oc的数组对象
[NSNull null] 空对象
2.4、创建一个空对象
NSNull *nilObject = [NSNull null];
NSArray *arr4 = [NSArray arrayWithObjects:@"a a", nilObject, nil];
NSLog(@"arr4 = %@", arr4);
3.数组的元素是什么
1)数组元素可以是任意对象,装的是对象的地址
NSInteger CGFloat BOOL xxx
4.什么是id类型的变量
1)通用对象类型 void * NSObject *
2)可以指向任何对象
NSArray常用方法
1、获取数组元素个数
count消息
- (NSUInteger)count;
2、通过索引获取相应的元素
- (id)ObjectAtIndex:(NSUInteger)index;
作用:通过下标获取数组中指定位置的元素
- (id)lastObject;
作用:取出最后一个元素
3、通过对象地址获取在数组中的索引
- (NSUInteger)indexOfObject:(id)anObject;
4、判断数组中数组包含元素anObject
- (BOOL)containsObject:(id)anObject;
5、如何取出数组中的一部分元素
1)subarrayWithRange消息
作用:取出数组中指定范围内的元素
2)objectsAtIndexes消息
作用:从数组中获取指定下标的元素
NSIndexSet对象,一个下标集合
NSMutableIndexSet对象,是NSIndexSet的子类,可以添加不同的下标
NSMutableIndexSet *indexes = [NSMutableIndexSet indexSet];
[indexes addIndex:0];
[indexes addIndex:2];
[indexes addIndex:3];
//将清单交给数组对象
NSArray *subarr2 = [arr2 objectsAtIndexes:indexes];
#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { NSArray *array = [[NSArray alloc] initWithObjects:@"zhangsan", @"lisi", @"wangwu", nil]; //1. 求数组的元素的个数 NSUInteger count = [array count]; NSLog(@"count = %lu", count); //3 //2. 根据索引获得数组的元素 //2.1 使用下标的方式获得元素 NSLog(@"array[0] = %@", array[0]); //2.2 通过方法获得元素 id obj = [array objectAtIndex:1]; NSLog(@"obj = %@", obj); //2.3 获得第一个元素 NSString *firstObj = [array firstObject]; NSLog(@"firstObj = %@", firstObj); //2.4 获得最后一个元素 NSString *lastObj = [array lastObject]; NSLog(@"lastObj = %@", lastObj); //3. 通过对象获得对象的下标 NSUInteger index = [array indexOfObject:@"lisi"]; NSLog(@"index = %lu", index); //4. 判断数组中数组包含元素anObject BOOL ret = [array containsObject:@"yangliu"]; NSLog(@"ret = %d", ret); } return 0; }
NSArray数组的遍历
回忆:如何在c语言中遍历一个数组的所有元素
NSlog(@"%@", arr); //打印数组就是打印数组的每个元素
1、通过下标遍历数组
int i;
for (i = 0; i < length; i ++)
2、NSEnumerator 枚举器
1)objectEnumerator消息
作用:正序输出所有元素
2)reverseObjectEnumerator消息
作用:逆序输出所有元素
【枚举器法】
NSEnumerator *enumerator = [array objectEnumerator];
id obj = nil;
while (obj = [enumerator nextObject])
{
NSlog(@"obj = %@", obj);
}
【注】
1)id obj: 因为不知道数组里面的具体的对象,所有使用泛型指针。
如果知道都是 某一个相同的类型, 可以使用具体的指针
这里可以使用 NSString *
2) objectEnumerator: 正序遍历数组
reverseObjectEnumerator: 逆序遍历数组
3)每次得到一个数组的一个元素, 将其赋值给 obj, 直到obj 得到的指针为 nil,
才会退出循环.
NSMutableArray
1、增加数组元素
追加元素
addObject 消息
(void)addObject:(id)anObject;
指定索引插入元素 [0 ~ count]
1)如何插入一个元素
insertObject:atIndex消息
- (void)insertObject:(id)anObject atIndex:(NSUInteger)index;
2) 插入多个元素
insertObjects:atIndexes
2、如何删除元素
1)删除指定索引的元素
- (void)removeObjectAtIndex:(NSUInteger)index;
2) 删除最后一个元素
- (void)removeLastObject;
3)根据指定对象来删除元素
- (void)removeObject:(id)anObject;
4)删除所有元素
- (void)removeAllObject;
5)一次性删除所有指定下标的元素
removeObjectsAtIndexes 消息
NSMutableIndexSet *indexes = [NSMutableIndexSet indexSet];
[arr1 removeObjectsAtIndexes:indexes];
6) 删除指定范围内指定的对象
- (void)removeObject:(id)anObject inRange:(NSRange)range;
#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { NSMutableArray *mutArray = [NSMutableArray array]; //增, 删、 改 //____________________增_________________________ //__________添加__________ //1) 添加一个元素 [mutArray addObject:@"a1"]; [mutArray addObject:@"a2"]; //2) 将一个数组的内容,全部添加到新的数组里面 [mutArray addObjectsFromArray:@[@"a3", @"a4"]]; NSLog(@"1--mutArray = %@", mutArray); //_________插入_________ //1)在指定的下标位置 插入 一个对象 [mutArray insertObject:@"XXX" atIndex:1]; NSLog(@"2--mutArray = %@", mutArray); //2)通过下标集合 插入一个数组的 所有的元素 NSMutableIndexSet *indexes = [NSMutableIndexSet indexSet]; //添加 整数 [indexes addIndex:0]; [indexes addIndex:2]; [indexes addIndex:6]; //下标的个数 和 插入数组的元素的个数 必须 一样多, 都则程序崩溃 NSArray *insetArr = @[@"zhangsan", @"lisi", @"wangwu"]; [mutArray insertObjects:insetArr atIndexes:indexes]; NSLog(@"3--mutArray = %@", mutArray); //_________________________删________________________ //1) 通过下标删除元素 [mutArray removeObjectAtIndex:0]; NSLog(@"4--mutArray = %@", mutArray); //2) 删除最后一个元素 [mutArray removeLastObject]; NSLog(@"5--mutArray = %@", mutArray); [mutArray removeObjectsInRange:NSMakeRange(0, 2)]; NSLog(@"6--mutArray = %@", mutArray); //根据数组删, 只会删参考数组里面和被删除数组里面都有的元素 [mutArray removeObjectsInArray:@[@"a2", @"a3", @"xiaozhang"]]; NSLog(@"7--mutArray = %@", mutArray); //删除数组中的对象, 【注】删除所有的相同的对象 [mutArray addObject:@"XXX"]; [mutArray addObject:@"XXX"]; [mutArray removeObject:@"XXX"]; NSLog(@"8--mutArray = %@", mutArray); //删除数组里面所有的对象 [mutArray removeAllObjects]; NSLog(@"9--mutArray = %@", mutArray); } return 0; }