首页 > 代码库 > 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"]
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
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。