? 下面详细的介绍Objective-C中的集合类以及每个集合类的用法,学过其他面向对象
编程语言的小伙伴们看到OC的集合类会有种莫名的亲切感,理解起来问题不大,可以类比Java中的集合类去学习。 在Objective-C中的集合类中主要包括不可变的数组--NSArray, ?可变的数组--NSMutableArray, ? 不可变的字典--NSDictionary, ? ?可变的字典--NSMutableDictionary, 不可变的集合--NSSet,可变的集合--NSMutableSet。
?
? ? 一、数组
?
? ? ? ? 1.不可变的数组 ?NSArray
?
? ? ? ? ? ? 数组是有序对象的集合,用来存储对象的有序列表,在OC中数组中必须存的是对象,不能是基本数据类型,若想存入基本数据类型,必须先把数据类型转换成对象,然后再存入集合类中。 NSArray也是OC中的一个对象,使用NSArray也需要进行实例化,前面的博客在类的初始化中提到了便利初始化函数和便利构造器,在NSArray中也少不了这两样东西我们可以通过NSArray的便利初始化函数或者便利构造器进行NSArray的实例化和初始化工作。
?
? ? ? ? ? ??
?
? ? ? ? (1)NSArray的初始化
?
? ? ? ? ? ? ? ? NSArray的便利初始化函数: -(id) initWithObjects : (id) firstObject, ....;
?
? ? ? ? ? ? ? ? NSArray的便利构造器: +(id) arrayWithObjects: (id) firstObject, ...;
?
? ? ? ? ? ? ? ?demo:
?
//NSArray的便利初始化
NSArray *array1 = [[NSArray alloc] initWithObjects:@"aaa", @"bbb", @"ccc", nil];
//NSArray的便利构造器
NSArray *array2 = [NSArray arrayWithObjects:@"111", @"222", @"333", nil];
?
?
? ? ? ? (2)获取数组元素的个数和数组的元素
?
? ? ? ? ? ? ? ? -(NSUInteger) count; 获取数组元素的个数
?
? ? ? ? ? ? ? ? -(id) objectAtIndex : (NSUInteger) index;
?
? ? ? ? ? ? ? ? demo:
?
?
//获取数组元素的个数和元素
int count = (int)[array1 count];
//获取相应索引的元素
id element = [array1 objectAtIndex:0];
NSLog(@"array1_count = %d, array[0] = %@", count, element);
? ? ? ? ? ??
?
? ? ? ? ? ? 运行结果:
?
?
2014-08-01 16:25:37.117 HelloOC[1285:303] array1_count = 3, array[0] = aaa
?
?
? ? ? ? ? (3)有了count和objectAtIndex我们就可以对数组进行元素的遍历啦
?
? ? ? ? ? ? demo:
?
//封装遍历数组的函数
void array_display(id array)
{
? ? for (int i = 0 ; i < [array count]; i++) {
? ? ? ? id temp = [array objectAtIndex:i];
? ? ? ? NSLog(@"%@", temp);
? ? }
}
?
?
?
?
? ? ? ? 2.可变数组:NSMutableArray
?
? ? ? ? ? ? NSArray的容量是固定的,而NSMutableArray的容量是可变的,我们可以在NSMutableArray实例化的时候先初始化一个容量,不过这个容量不是固定的,不够的时候会自动增加。NSMutableArray是NSArray的子类,是对NSArray的一个扩充。
?
? ? ? ? ? ? (1) NSMutableArray的初始化
?
? ? ? ? ? ? ? ? ? NSMutableArray的便利初始化函数:-(id) initWithCapacity : (NSUInteger) numItems;
?
? ? ? ? ? ? ? ? ? NSMutableArray的便利构造器:+(id) arrayWithCapacity: (NSUInteger) numItems;
?
? ? ? ? ? ? demo:
?
//NSMutableArray的便利初始化
NSMutableArray *array3 = [[NSMutableArray alloc] initWithCapacity:3];
//NSMutableArray的便利构造器
NSMutableArray *array4 = [NSMutableArray arrayWithCapacity:3];
?
?
? ? ? ? ? ? (2)元素的添加和删除
?
? ? ? ? ? ? ? ? 增加元素: -(void) addObject: (id) anObject; --往数组的尾部添加元素
?
? ? ? ? ? ? ? ? 删除全部内容: -(void) removeAllObjects;
?
? ? ? ? ? ? ? ? 删除最后一个元素: -(void) removeLastObject;
?
? ? ? ? ? ? ? ? 通过索引删除元素: -(void) removeObjectAtIndex: (NSUInteger) index;
?
? ? ? ? ? ? ? ? 删除任意一个元素: -(void) removeObject : (id)object;
?
? ? ? ? ? ? 代码如下:
?
?
//初始化NSMutableArray
NSMutableArray *array = [NSMutableArray arrayWithObjects:@"111", @"222", @"333", nil];
//添加元素
[array addObject:@"444"];
?
//移除元素
[array removeObject:@"111"];
?
//移除最后一个元素
[array removeLastObject];
?
//按照索引删除元素
[array removeObjectAtIndex:0];
?
array_display(array);
?
?
? ? ? ? ? ? 运行结果:
?
?
2014-08-01 17:18:58.658 HelloOC[1467:303] 333
?
?
? ? ? ? (3)元素的插入和替换
?
? ? ? ? ? ? 通过数组的索引来进行元素的替换:-(void) replaceObjectAtIndex :(NSUInteger) index withObject: (id) anObject;
?
? ? ? ? ? ? 在指定索引处插入对象:-(void) insertObject : (id)