objective-c 数组对象 (5)

使用数组对象创建的数组功能非常强大,在Java语言或者C语言中定义的数组必须满足数组中的每一个元素必须是同样的类型。而Objective-C语言可以在Array数组中放任意类型的数据,值得注意的是只能放指向这个对象的指针,如果直接放int ,char,double 等等,是不行的在Java语言或者C语言中定义的数组必须满足数组中的每一个元素必须是同样的类型。而Objective-C语言可以在Array数组中放任意类型的数据,

 

用来存储对象的有序列表(任意类型的对象,不能存储数据类型比如 int bool char)

限制: 只能存储ObjectiveC 的对象, 不能存储C 语言的基本数据类型 (intfloatenumstruct、 或者NSArray 中的随机指针) 。

同时也不能存储nil(对象的零值或NULL值) 

 

1.不可变数组对象

 
使用NSArray关键字创建一个不可变的数组,一旦初始化完毕后这个数组的元素是不可以在动态的添加与删除。
创建MyClass对象,将指向这个对象的指针也可以存入NSArray数组中,可见NSArray对象数组中可以储存任意对象的数据。
 
[array count] : 得到这个对象数组的长度。
[array objectAtIndex 0]: 传入数组脚标的id 得到数据对象。
[arrayWithObjects; ...] :向数组对象初始化赋值。这里可以写任意对象的指针,结尾必须使用nil。标志结束。
 

 使用了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。感觉像链表一样,后面的位置递增。

[array insertObject:(NSArray *) atIndex:(NSIndexSet *)] :向可变数组中插入一个数组对象,可以任意设置它的位置脚标索引。
NSRange range = NSMakeRange(0,5); 设置一个范围为 0 到 5 之间。
[array removeObject:myClass inRange:range] : 设置在一个范围内删除数据,如果这个范围内没有删除的这个对象则不会删除任何东西。例子中因为myClass对象在 数组 0 到 5的范围内,所以myClass就被删除掉了。
 
[array removeObject:(id)] :无需考虑范围,主要数组中存在这个对象就会直接被删除。
[array removeObjectAtIndex:(NSUInteger)]:删除数组中指定脚标索引的数据。
 
[array removeObjectIdenticalTo:(id)] : 删除数组中指定元素
[array removeObjectIdenticalTo:(id) inRange:(NSRange)] : 在指定范围内删除指定的元素。
 
[array removeObjectsInArray:(NSArray *)] :删除一个数组的元素。
[array replaceObjectAtIndex 2 withObject:@"已经修改了"]:替换数组脚标为2的数据。
 
 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 部分方法比较像。

http://www.xuanyusong.com/archives/412

posted @ 2013-12-26 14:59  aosting  阅读(299)  评论(0编辑  收藏  举报