【发布时间】:2020-09-26 15:32:24
【问题描述】:
我正在制作一个程序来计算文件夹中有多少行代码,您可以在其中输入要检查的扩展名(例如.cs),它会列出所有具有该扩展名的文件及其行代码如下:
1. BackgroundProcesses.cs: 153
2. App.xaml.cs: 15
3. MainTableManifest.cs: 41
目前,我只是使用Directory.GetFiles() 来获取文件,它们没有任何特定的顺序。但是,我想按每个文件的显示行数从最小到最大对每个文件进行排序,以便通过如下输出轻松查看最大的文件:
1. App.xaml.cs: 15
2. MainTableManifest.cs: 41
3. BackgroundProcesses.cs: 153
这是我的二维锯齿数组的基本样子:
string[][] arr = new string[][] {
new string[]{"file1", "324"},
new string[]{"file2", "1903"},
new string[]{"file3", "617"}
};
显然,我需要在排序时将字符串转换为数字(我认为您不能拥有具有不同数组类型的锯齿状数组)。关于如何将锯齿状数组转换为类似的东西的任何想法?
string[][] arr = new string[][] {
new string[]{"file1", "324"},
new string[]{"file2", "617"},
new string[]{"file3", "1903"}
};
【问题讨论】:
-
不要使用二维字符串数组。使用类型化对象的集合(可能是
List<>)。具有两个属性的类型,Name(字符串)和LineCount(整数)。你的程序会变得更简单 -
看看@rossgurbutt 的回答。实现它,看看你是否能理解它。这是针对您的问题的经典面向对象的解决方案。在查看其他基于 tuple 的解决方案之前,您应该很好地掌握这一点。您可以尝试将这两种方法结合起来;从对象开始,然后使用 LINQ 排序并获取您的最终答案
-
你可以使用值元组或字典来代替二维数组
-
请使用 EnumerateFiles 而不是 GetFiles,尤其是在您的目录可能包含大量文件的情况下。稍后您会感谢自己,特别是如果您使用建议的将信息存储在强类型集合中的解决方案(甚至是值元组方法),您无论如何都会从 GetFiles 中丢弃数组
标签: c# arrays sorting multidimensional-array jagged-arrays