1、先解决如何获取一个文件的代码行数
一开始对于这个问题,我的思路就回荡在:1字符串子字符串的判断 2循环直到结束的想法 3将原来是"\n"替换掉之类的想法
一个问题总会有多种解决方案,下面的解决方案来自MJ基础视频里讲过的方案,挺不错的,基本思路是:通过"\n"拆分字符串到OC数组中,最后判断数组的长度即可。
虽然有时候我们可能想不到更好的方法,但是也不能阻拦我们去积累好的方法,所以纪录在此博文中。
学习来自 MJ 的某个基础视频
2、然后进一步考虑一个目录下的所有文件以及目录下的子文件的行数
思路:<1>这样的话,首先要处理 path 可以是文件所在目录,也可以是文件夹所在的目录。所以就需要NSFileManager对象来处理文件和文件夹。
NSFileManager可以判断当前目录是对应的文件还是文件夹。
<2>当如果是文件的话,就执行上面的程序,输出文件的行数。
<3>当如果是文件夹的话,就需要继续执行方法<1>所以这里就需要用递归来处理这种需要重复执行包含的内容。
下面就直接给出MJ的代码:
1 #import <Foundation/Foundation.h>
2 3 void codeLine(NSString *path)
5 //需要获取的内容 6 NSString* content;
7 //获取NSFileManager的单例对象 8 NSFileManager *manager = [NSFileManager defaultManager];
9 //判断path是文件还说路径 10 BOOL isDir;//是否为文件夹 11 BOOL isExist = [manager fileExistsAtPath:path isDirectory:&isDir];//是否存在 12 13 if (!isExist) {
14 NSLog(@"路径下的目录或文件 不存在的");
16 17 if (isDir) {
18 NSLog(@"是目录文件夹。");
19 //就需要打印所有的子文件夹 20 NSArray *dirArray = [manager contentsOfDirectoryAtPath:path error:nil];
21 //遍历数组中所有的文件和目录 22 for (NSString* fileName in dirArray) {
23 NSString* fileNames = [NSString stringWithFormat:@"%@/%@",path,fileName];
24 NSLog(@"%@",fileNames);
25 //然后递归调用,遇到文件名就输出行数 26 codeLine(fileNames);
28 }else{
29 content = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
30 NSArray *array = [content componentsSeparatedByString:@"\n"];
31 //获取文件的行数 32 NSLog(@"行数是:%lu",(unsigned long)array.count);
35 36 int main(int argc, const char * argv[]) {
37 @autoreleasepool {
38 // /Users/HeYang/Desktop/HTTP 39 NSString* path = @"/Users/HeYang/Desktop/HTTP";
40 codeLine(path);
42 return 0;
3、然后进一步解决的问题是:文件为后缀.h .m .c的文本
1 #import <Foundation/Foundation.h>
2 3 int codeLine(NSString *path)
5 //需要获取的内容 6 NSString* content;
7 //获取NSFileManager的单例对象 8 NSFileManager *manager = [NSFileManager defaultManager];
9 //判断path是文件还说路径 10 BOOL isDir;//是否为文件夹 11 BOOL isExist = [manager fileExistsAtPath:path isDirectory:&isDir];//是否存在 12 13 if (!isExist) {
14 NSLog(@"路径下的目录或文件 不存在的");
15 return 0;
17 NSArray *array;
18 NSString *fullFileName;
19 if (isDir) {
20 //就需要打印所有的子文件夹 21 NSArray *dirArray = [manager contentsOfDirectoryAtPath:path error:nil];
22 //遍历数组中所有的文件和目录 23 for (NSString* fileName in dirArray) {
24 fullFileName = [NSString stringWithFormat:@"%@/%@",path,fileName];
25 //然后递归调用,遇到文件名就输出行数 26 codeLine(fullFileName);
28 return 0;
29 }else{
30 //还需要判断非指定文件名后缀的文件 31 NSString *extends = [path pathExtension];
32 if (![extends isEqualToString:@"h"]
33 && ![extends isEqualToString:@"c"]
34 && ![extends isEqualToString:@"m"]){
35 return 0;
37 content = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
38 array = [content componentsSeparatedByString:@"\n"];
40 NSLog(@"%@ 的行数是:",path);
41 //获取文件的行数 42 NSLog(@"行数是:%lu",(unsigned long)array.count);
43 return 0;
45 46 int main(int argc, const char * argv[]) {
47 @autoreleasepool {
48 // /Users/HeYang/Desktop/HTTP 49 NSString* path = @"/Users/HeYang/Desktop/HTTP";
50 codeLine(path);
52 return 0;
推荐系统[二]:召回算法超详细讲解[召回模型演化过程、召回模型主流常见算法(DeepMF_TDM_Airbnb Embedding_Item2vec等)、召回路径简介、多路召回融合]
推荐系统[二]:召回算法超详细讲解[召回模型演化过程、召回模型主流常见算法(DeepMF_TDM_Airbnb Embedding_Item2vec等)、召回路径简介、多路召回融合]
Python算法之动态规划(Dynamic Programming)解析:二维矩阵中的醉汉(魔改版leetcode出界的路径数)
现在很多互联网企业学聪明了,知道应聘者有目的性的刷Leetcode原题,用来应付算法题面试,所以开始对这些题进行“魔改”,比如北京某电商平台的这道题:
有一个正方形的岛,使用二维方形矩阵表示,岛上有一个醉汉,每一步可以往上下左右四个方向之一移动一格,如果超出矩阵范围他就死了,假设每一步的方向都是随机的(因为他是醉的),请计算n步以后他还活着的概率。
哈密顿路径在图G中找出一条包含所有顶点的简单路径,该路径称为哈密顿路径(1)图G是非完全有向图,且图G不一定存在哈密顿路径; > (2)设计算法判断图G是否存在哈密顿路径,如果存在,输出一天哈密顿路径
哈密顿路径在图G中找出一条包含所有顶点的简单路径,该路径称为哈密顿路径(1)图G是非完全有向图,且图G不一定存在哈密顿路径; > (2)设计算法判断图G是否存在哈密顿路径,如果存在,输出一天哈密顿路径
【多式联运】基于帝企鹅AFO 粒子群PSO 遗传GA算法求解不确定多式联运路径优化问题附matlab代码
【多式联运】基于帝企鹅AFO 粒子群PSO 遗传GA算法求解不确定多式联运路径优化问题附matlab代码
【路径优化】基于人工蜂群(ABC)算法和粒子群优化算法的组合求解路径优化问题附Matlab代码
【路径优化】基于人工蜂群(ABC)算法和粒子群优化算法的组合求解路径优化问题附Matlab代码