objective-c 数组对象 (5)
使用数组对象创建的数组功能非常强大,在Java语言或者C语言中定义的数组必须满足数组中的每一个元素必须是同样的类型。而Objective-C语言可以在Array数组中放任意类型的数据,值得注意的是只能放指向这个对象的指针,如果直接放int ,char,double 等等,是不行的在Java语言或者C语言中定义的数组必须满足数组中的每一个元素必须是同样的类型。而Objective-C语言可以在Array数组中放任意类型的数据,
用来存储对象的有序列表(任意类型的对象,不能存储数据类型比如 int bool char)
限制: 只能存储Objective—C 的对象, 不能存储C 语言的基本数据类型 (int、float、enum、struct、 或者NSArray 中的随机指针) 。
同时也不能存储nil(对象的零值或NULL值)
1.不可变数组对象
使用了for遍历数组和快速枚举遍历。看momo说第二种的方法效率比较高。
for(NSObject *object in array) : 遍历array这个数组,每一次循环将数组中的元素赋值给 *object ,实现循环遍历。
1 MyClass *myClass =[[MyClass alloc]init];
2 NSArray *array = [NSArray arrayWithObjects:@"xx",@"MOMO",@"yy",myClass,nil ]; 3 4 int count= [array count]; 5 6 NSLog(@"array count is %d" ,count); 7 for(int i=0;i<count;i++){ 8 NSLog(@"i = %d value = %@",i,[array objectAtIndex:i]); 9 } 10 11 for (NSObject *object in array){ 12 NSLog(@"first for array:%@",object); 13 }
输出:
2013-12-26 14:48:05.805 Helloworld20131021_Object[1421:c07] array count is 4
2013-12-26 14:48:05.805 Helloworld20131021_Object[1421:c07] i = 0 value = xx
2013-12-26 14:48:05.806 Helloworld20131021_Object[1421:c07] i = 1 value = MOMO
2013-12-26 14:48:05.806 Helloworld20131021_Object[1421:c07] i = 2 value = yy
2013-12-26 14:48:05.807 Helloworld20131021_Object[1421:c07] i = 3 value = <MyClass: 0x9510e20>
2013-12-26 14:48:05.807 Helloworld20131021_Object[1421:c07] first for array:xx
2013-12-26 14:48:05.808 Helloworld20131021_Object[1421:c07] first for array:MOMO
2013-12-26 14:48:05.808 Helloworld20131021_Object[1421:c07] first for array:yy
2013-12-26 14:48:05.808 Helloworld20131021_Object[1421:c07] first for array:<MyClass: 0x9510e20>
使用 componentsSeparatedByString : 来切分 NSArray
使用 componentsJoinedByString : 来合并 NSArray 中的元素并创建字符串
数组的拼接
1 2 NSString *string=@"up,down,left,right"; 3 NSArray *array2=[string componentsSeparatedByString:@","]; 4 5 for (NSObject * object in array2) 6 { 7 NSLog(@"输出对象数组:%@", object); 8 } 9 10 string=[array2 componentsJoinedByString:@":"]; 11 12 NSLog(@"the new string is %@",string);
输出:
2013-12-26 15:20:19.914 Helloworld20131021_Object[1704:c07] 输出对象数组:up
2013-12-26 15:20:19.915 Helloworld20131021_Object[1704:c07] 输出对象数组:down
2013-12-26 15:20:19.915 Helloworld20131021_Object[1704:c07] 输出对象数组:left
2013-12-26 15:20:19.916 Helloworld20131021_Object[1704:c07] 输出对象数组:right
2013-12-26 15:20:19.916 Helloworld20131021_Object[1704:c07] the new string is up:down:left:right
2.可变数组对象
[NSMutableArray arrayWithCapacity:10] :初始化可变数组对象的长度,如果后面代码继续添加数组超过长度10以后NSMutableArray的长度会自动扩充,所以不用担心数组越界。
[array addObject:...] : 向可变数组尾部添加数据对象。
[array addObjectsFromArray:..] :向可变数组尾部添加一个数组对象。
[array insertObject:@"插入一只小老虎" atIndex:1] :向可变数组中插入一个字符串对象,并且设定它的位置脚标索引为 1。感觉像链表一样,后面的位置递增。
1 2 //创建一个可变的数组长度为10 3 NSMutableArray *array1 = [NSMutableArray arrayWithCapacity:10]; 4 5 //向数组中动态的添加对象 6 [array1 addObject:@"雨松"]; 7 [array1 addObject:@"MOMO"]; 8 [array1 addObject:@"小可爱"]; 9 [array1 addObject:@"哇咔咔"]; 10 11 [array1 addObject:myClass]; 12 //向数组中插入 13 [array1 insertObject:@"插入一只小老虎" atIndex:1]; 14 15 //设置一个删除范围 16 NSRange range=NSMakeRange(0,6); 17 /* 18 NSRange range = NSMakeRange(0,5); 设置一个范围为 0 到 5 之间。 19 [array removeObject:myClass inRange:range] : 设置在一个范围内删除数据,如果这个范围内没有删除的这个对象则不会删除任何东西。例子中因为myClass对象在 数组 0 到 5的范围内,所以myClass就被删除掉了。 20 21 [array removeObject:(id)] :无需考虑范围,主要数组中存在这个对象就会直接被删除。 22 [array removeObjectAtIndex:(NSUInteger)]:删除数组中指定脚标索引的数据。 23 24 [array removeObjectIdenticalTo:(id)] : 删除数组中指定元素 25 [array removeObjectIdenticalTo:(id) inRange:(NSRange)] : 在指定范围内删除指定的元素。 26 27 [array removeObjectsInArray:(NSArray *)] :删除一个数组的元素。 28 29 */ 30 //删除元素 31 [array1 removeObject:myClass inRange:range]; 32 33 //修改脚标索引为2的元素 34 35 [array1 replaceObjectAtIndex: 2 withObject:@"已经修改了"]; 36 37 38 for (NSObject * object in array1) 39 { 40 NSLog(@"输出对象数组:%@", object); 41 }
输出:
2013-12-26 14:48:05.845 Helloworld20131021_Object[1421:c07] 输出对象数组:雨松
2013-12-26 14:48:05.846 Helloworld20131021_Object[1421:c07] 输出对象数组:插入一只小老虎
2013-12-26 14:48:05.846 Helloworld20131021_Object[1421:c07] 输出对象数组:已经修改了
2013-12-26 14:48:05.847 Helloworld20131021_Object[1421:c07] 输出对象数组:小可爱
2013-12-26 14:48:05.848 Helloworld20131021_Object[1421:c07] 输出对象数组:哇咔咔
感觉比java的 arraylist linkedlist 部分方法比较像。