【语法】数组Array

请参照NSArray练习

【1】数组的创建

数组是不能添加元素的,只能在创建的同时赋值。

1.创建数组

  //静态方法不需要管理内存
    NSArray *array= [NSArray array];  //这样创建是没有数组的,是创建空的数组
    array= [NSArray arrayWithObject:@"123"];//创建一个有1个元素的数组。
    array= [NSArray arrayWithObjects:@"1",@"2",@"3", nil];//这里是创建一个有多个元素的数组   //nil在这里表示是一个结束符类似于/0.
    

 

2.查询数组内元素个数

    //查询元素个数
   int count=[array count];//用来计算数组内部有多少个元素
    
    //同上面等价
    int count =array.count;
    
    NSLog(@"%i",count); //输出

 

3.数组中既可以放元素,也可以放数组

    //或者有一种方式就是arrary1中既可以放元素,也可以放数组
    NSObject *obj=[[NSObject alloc] init];
    NSArray *array1=[NSArray arrayWithObjects:@"a",@"b",@"c",obj, nil];
    NSLog(@"%@",array1);

 

 

【2】数组的查询

1.是否包含某元素

  //判断字符数组中是否包含某元素
    NSArray *array=[NSArray arrayWithObjects:@"1",@"2",@"3", nil];
    if([array containsObject:@"1"]){
        NSLog(@"包含了字符");
        
    }else
    {
        NSLog(@"不包含该字符");
    }

 

2.判断数组内最后一个元素是什么

 //判断最后一个元素是什么
    NSString *last=[array lastObject];
    NSLog(@"last=%@",last);

 

3.通过索引查询该索引值对应的元素

    
    //根据某个索引值然后找到该位置的元素是什么
    NSString *str=[array objectAtIndex:1];
    NSLog(@"%@",str);
    

 

4.通过元素查询索引值(如果是负数,那么就是查找不倒。)

  //根据某个元素,查找到该元素的索引位置
    //如果是负数,那么就是查找不倒。
    int index=[array indexOfObject:@"2"];
    NSLog(@"index=%i",index);
    

 

【3】数组的比较

1.比较两个集合内容是否相同

//比较两个集合内容是否相同
 -(BOOL)isEqualToArray:(NSArray  *)otherArray

 

2.返回第一个相同的对象元素

 //返回两个集合中第一个相同的对象元素
 -(id)firstObjectCommonWithArray:(NSArray *)otherArray

 

 

【4】数组的遍历

1.for循环进行遍历

void arrayFor(){
    
    NSArray *array=[NSArray arrayWithObjects:@"1",@"2",@"3", nil];
    int count =array.count;
    for(int i=0;i<count;i++)
    {
        id obj=[array objectAtIndex:i];
        NSLog(@"%i-%@",i,obj);
    }
}

 

2.快速遍历方法

void arrayFor2(){
    
    NSArray *array=[NSArray arrayWithObjects:@"1",@"2",@"3", nil];
    int i=0;
    for(id obj in array){
        NSLog(@"%i-%@",i,obj);
        i++;
    }

}

 

3.快速遍历方法

enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop)
如图打入这种方法的时候将
^(id obj, NSUInteger idx, BOOL *stop)这一句进行双击展开

  

展开成为:

  

例子如下:
void arrayFor3(){
    
    NSArray *array=[NSArray arrayWithObjects:@"1",@"2",@"3",@"4", nil];
[array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
    //每遍历一个元素都会调用一次block
    //利用指针修改外面bool变量值
    if(idx==1){
     *stop=YES;//传入一个stop指针让内部能进行修改
    }
    NSLog(@"%i-%@",idx,obj);
}];
}

 

4.使用迭代器进行遍历

   NSArray *array=[NSArray arrayWithObjects:@"1",@"2",@"3", nil];
   NSEnumerator *enumerator=[array objectEnumerator];//获取数组的迭代器

 

5.反序迭代器,从尾部开始遍历

    NSArray *array=[NSArray arrayWithObjects:@"1",@"2",@"3", nil];
  //反序迭代器,从尾部开始进行遍历
    NSEnumerator *enumerator=[array reverseObjectEnumerator];

 

6.取得下一个需要遍历的元素

    [enumerator nextObject];//取得下一个需要遍历的元素
    id obj=nil;
    while (obj=[enumerator nextObject]) {
        NSLog(@"obj=%@",obj);
    }
    

 

7.返回迭代器中的所有元素

    //返回迭代器中的所有元素
   NSArray *array2=[enumerator allObjects];
    NSLog(@"array2:%@",array2);
    
    

 

 【5】派生数组

 

    NSArray *array=[NSArray arrayWithObjects:@"1",@"2",@"3", nil];
    
    //这句话的意思就是说,在上面array的基础上再加入一个元素进入生成新的数组array2
    NSArray *array2=[array arrayByAddingObject:@"4"];
    NSLog(@"%@",array2);
    /*
     2014-01-31 14:55:43.412 NSArray2[404:303] (
     1,
     2,
     3,
     4
     )
     */
    

 

 

2.

  NSArray *array=[NSArray arrayWithObjects:@"1",@"2",@"3", nil];
       NSArray *array3= [array arrayByAddingObjectsFromArray:[NSArray arrayWithObjects:@"5",@"6", nil]];
    NSLog(@"%@",array3);
    /*2014-01-31 14:55:43.414 NSArray2[404:303] (
                                               1,
                                               2,
                                               3,
                                               5,
                                               6
                                               )*/

 

3.数组元素的截取

    NSArray *array4=[NSArray arrayWithObjects:@"1",@"2",@"3",@"4", nil];
    
    //给定一个范围进行截取操作
    NSRange range=NSMakeRange(1, 2);
    NSArray *array5= [array4 subarrayWithRange:range];
    NSLog(@"%@",array5);
    /*2014-01-31 14:59:21.153 NSArray2[439:303] (
     2,
     3
     )
     */

 

【6】数组的其他用法

 

1.将数组内的元素拼接起来然后生成新的一个字符串

    //将数组内的元素拼接起来然后生成新的一个字符串
    NSArray *array=[NSArray arrayWithObjects:@"1",@"2",@"3",@"4", nil];
   NSString *str= [array componentsJoinedByString:@","];
    NSLog(@"%@",str);
    /*2014-01-31 15:02:08.786 NSArray2[472:303] 1,2,3,4*/
    

 

2.将一个数组写到文件中去(生成一个xml文件)

    
    //将一个数组写到文件中去(生成一个xml文件)
    NSString *path=@"/Users/haiyefeng/Desktop/test.txt";
    [array writeToFile:path atomically:YES];

 

3.//从文件中读取数组内容(文件有严格的格式要求)

     //从文件中读取数组内容(文件有严格的格式要求)
    NSArray *array2=[NSArray arrayWithContentsOfFile:path];
    NSLog(@"%@",array2);
    

接上:文件内容要求

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<array>
    <string>1</string>
    <string>2</string>
    <string>3</string>
    <string>4</string>
</array>
</plist>

 

 

【7】数组的排序

1.返回一个排好序的数组,原先数组的元素顺序不会改变
    NSArray *array=[NSArray arrayWithObjects:@"2",@"4",@"3",@"1", nil];
    //返回一个排好序的数组,原先数组的元素顺序不会改变
    //制定的元素的比较方法:compare:
    NSArray *array2=[array sortedArrayUsingSelector:@selector(compare:)];
    NSLog(@"%@",array2);

    /*2014-01-31 15:18:45.952 NSArray2[658:303] (
     1,
     2,
     3,
     4
     )*/
    
    

 

 

posted @ 2014-01-30 21:40  太过于漂流  阅读(592)  评论(0编辑  收藏  举报