如何基于文件首行正整数对TXT文件名列表进行升序排序
按文件首行数字排序.txt文件名列表(C#实现)
直接将文件名与对应首行数字关联后排序即可,以下是完整实现:
完整代码示例
using System; using System.Collections.Generic; using System.IO; using System.Linq; public List<string> GetSortedFileNamesByFirstLineNumber(string filePath) { DirectoryInfo di = new DirectoryInfo(filePath); FileInfo[] files = di.GetFiles("*.txt"); // 关联文件名和对应的首行数字 var fileNumberPairs = new List<(string FileName, int LineNumber)>(); foreach (var file in files) { string fullPath = Path.Combine(filePath, file.Name); string[] lines = File.ReadAllLines(fullPath); // 按题目描述所有文件首行都是有效正整数,这里仍保留安全校验 if (lines.Length > 0 && int.TryParse(lines[0], out int number)) { fileNumberPairs.Add((file.Name, number)); } } // 按数字从小到大排序,提取文件名 return fileNumberPairs.OrderBy(pair => pair.LineNumber) .Select(pair => pair.FileName) .ToList(); }
关键说明
- 使用元组关联文件名和首行数字,避免维护两个独立数组的麻烦
- 用
Path.Combine拼接文件路径,避免手动拼接导致的路径分隔符错误 - 加入
int.TryParse做安全校验,防止空文件或格式异常的情况(题目虽说明都是正整数,但实际项目建议保留) - 借助LINQ的
OrderBy和Select快速完成排序与结果提取,代码简洁易读
非LINQ实现方式(若偏好传统写法)
如果不想用LINQ,可直接对关联集合排序:
// 替换上述排序部分的代码 fileNumberPairs.Sort((a, b) => a.LineNumber.CompareTo(b.LineNumber)); var sortedFileNames = new List<string>(); foreach (var pair in fileNumberPairs) { sortedFileNames.Add(pair.FileName); } return sortedFileNames;
内容的提问来源于stack exchange,提问作者John Doe
相关产品推荐
相关产品推荐

