黑马程序员技术交流社区

标题: Objective-C中的集合类【1】 [打印本页]

作者: ZXY66452    时间: 2015-12-6 21:00
标题: Objective-C中的集合类【1】
一、数组

    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) anObject atIndex : (NSUInteger) index;
//初始化NSMutableArray
NSMutableArray *array = [NSMutableArray arrayWithObjects:@"111", @"222", @"333", nil];
//对指定位置的元素进行替换
[array replaceObjectAtIndex:0 withObject:@"aaa"];
//在相应的位置插入元素
[array insertObject:@"bbb" atIndex:1];
array_display(array);
        运行结果:
2014-08-01 17:44:20.769 HelloOC[1520:303] aaa
2014-08-01 17:44:20.769 HelloOC[1520:303] bbb
2014-08-01 17:44:20.770 HelloOC[1520:303] 222
2014-08-01 17:44:20.770 HelloOC[1520:303] 333
    4.数组的遍历
        上面已经写了一种数组遍历方式,下面总结了其他的遍历方式,用枚举器(类似Java中的迭代器)和快速枚举(类似PHP中的foreach)

        (1)枚举器(迭代器)的用法
                要通过NSEnumerator来遍历数组首先得通过-(NSEnumerator *) objectEnumerator来得到枚举器;通过枚举其中的nextObject来获取对象                demo:如下//迭代遍历数组
//获取枚举器
NSEnumerator *enumerator = [array objectEnumerator];
//临时变量
id obj;
while (obj = [enumerator nextObject]) {
    NSLog(@"%@", obj);
}


        (2)快速遍历法,相当于PHP中的foreach的用法
for(id obj in array)
{
    NSLog(@"%@", obj);
}






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2