首页 > 代码库 > Foundation-04_集合类_NSArray

Foundation-04_集合类_NSArray

NSArray:不可变数组

NSMutableArray:可变数组
 
NSArray
    OC数组不能存放nil值
    OC数组只能存放OC对象,不能存放非OC对象,比如:int、struct、enum等
   
    这个array永远是空数组
    NSArray *arr1 = [NSArray array];
   
    nil是数组元素结束的标记
    NSArray *arr2 = [NSArray arrayWithObjects:@"jack",@"Rose",nil];
 
    快速创建一个NSAssay对象(@[]创建一个数组对象)
    NSArray *arr3 = @[@"jack",@"rose",@"yao"];
 
    返回数组元素个数
    [arr2 count];
    arr2.count;
   
    以前访问数组元素的方法
    [arr2 objectAtIndex:1];
   
    现在访问数组元素的方法(编译器特性)
    arr2[1];
   
    遍历数组
    for (int i=0; i < arr3.count; i++)
    {
        NSLog(@"%@",arr3[i]);
    }
    退出for循环的话使用break;
   
    快速遍历 (id obj 代表着数组中的每一个元素)
    for (id obj in arr3)
    {
        NSUInteger i =  [arr3 indexOfObject:obj];//获取元素在数组中的位置
        NSLog(@"%@",obj);
    }
 
    每遍历一个元素,就会调用一次block
    并且当前元素和索引位置当做参数传递给block
    [arr3 enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
        NSLog(@"-");
        if(idx == 0)
        { 
            //停止遍历
            *stop = YES;
        }
    }];
    BOOL *stop是和break相同的功能,退出遍历
 
    
   NSString *content = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
   NSArray *array = [content componentsSeparatedByString:@"\n"];
    根据后面的字符串将前面的字符串分割(相当于c#中的split)
 
根据传递过来的路径计算文件总的行数:  
 
NSFileManager:文件管理者(和C#中的File类相似) 
    创建方式: NSFileManager *mgr = [NSFileManager defaultManager];
 
fileExistsAtPath:判断path是文件还是文件夹(如果是文件,返回dir=NO,如果是文件夹返回dir=YES)
        当文件存在返回YES,文件不存在返回NO
       BOOL  b =   [mgr fileExistsAtPath:path isDirectory:&dir]; 
 
contentsOfDirectoryAtPath:查询文件夹下的所有文件夹和文件,返回一个数组NSArray
     NSArray *array = [mgr contentsOfDirectoryAtPath:path error:nil];

 

pathExtension:获取路径的扩展名
isEqualToString:比较两个字符串是否相等
  NSString *extension = [[path pathExtension] lowercaseString];//获取文件扩展名并且转换成小写
  if (![extension isEqualToString:@"h"]
 
stringByReplacingCharactersInRange:使用新的字符串替换字符串中的某一范围内的字符串
 // 删掉文件路径前面的/Users/apple/Desktop/iOS课堂共享/0722课堂共享/
        NSRange range = [path rangeOfString:@"/Users/apple/Desktop/iOS课堂共享/0722课堂共享/"];
        NSString *str = [path stringByReplacingCharactersInRange:range withString:@""];

NSUInteger codeLineCount(NSString *path)
{
    1、创建文件管理者
    NSFileManager采用了单例模式(在整个程序运行过程中只有一份)
    下面这句代码调用多次,返回的也是同一个对象
    NSFileManager *mgr = [NSFileManager defaultManager];
    2、判断path是文件夹还是文件路径
    BOOL dir = NO;//标记是否为文件夹
    整个路径是否存在
    BOOL exist = [mgr fileExistsAtPath:path isDirectory:&dir];
    if(!exist)
    {
        return 0;
    }
    if(dir)
    {
        保存行数
        NSUInteger count = 0;
        存储着当前文件夹下面的所有内容(文件夹和文件)
        NSArray *array = [mgr contentsOfDirectoryAtPath:path error:nil];
        遍历数组中的所有元素
        for (NSString *fileName in array)
        {
            子文件或者子文件夹的全路径
            NSString *fullPath = [NSString stringWithFormat:@"%@/%@",path,fileName];
            递归调用
            count += codeLineCount(fullPath);
        }
        return count;
    }
    else
    {
        // 判断文件的拓展名(忽略大小写)
        NSString *extension = [[path pathExtension] lowercaseString];
        if (![extension isEqualToString:@"h"]
            && ![extension isEqualToString:@"m"]
            && ![extension isEqualToString:@"c"])
        {
            // 文件拓展名不是h,而且也不是m,而且也不是c
            return 0;
        }
       
        // 加载文件内容
        NSString *content = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
       
        // 将文件内容切割为每一行
        NSArray *array = [content componentsSeparatedByString:@"\n"];
       
        // 删掉文件路径前面的/Users/apple/Desktop/iOS课堂共享/0722课堂共享/
        NSRange range = [path rangeOfString:@"/Users/apple/Desktop/iOS课堂共享/0722课堂共享/"];
        NSString *str = [path stringByReplacingCharactersInRange:range withString:@""];
       
        // 打印文件路径和行数
        NSLog(@"%@ - %ld", path, array.count);
       
        return array.count;
    }
}
 
 
NSMutableArray
    基本用法:
    //初始化
    NSMutableArray *array = [NSMutableArray arrayWithObjects:@"Rose",@"Tom", nil];
    //添加元素
    [array addObject:@"jack"];
    //删除所有元素
    [array removeAllObjects];
    //删除指定对象
    [array removeObject:@"jack"];
    [array removeObjectAtIndex:1];
   
    //错误写法
    [array addObject:nil];
 
    @[@"jack",@"rose"];//这个方法返回值是NSArray。所以下面的写法是错误的:
        NSMutableArray *yy = @[@"jack",@"Rose"];
        [yy addObject:@"jk"];
    
 
NSArray排序
 
NSMutableArray其他用法:
  删除元素
  添加元素:
  替换元素
排序

 

Foundation-04_集合类_NSArray