如何用LINQ基于IEnumerable<string>获取并分组文件扩展名
用LINQ按文件类型分组/排序的实现方法
你可以通过两种方式实现需求:直接使用Path.GetExtension(更轻量,无需实例化对象),或者通过FileInfo获取扩展名。以下是具体的LINQ实现代码:
按文件类型分组
方式1:使用Path.GetExtension(推荐)
// 按扩展名分组,忽略大小写(.txt和.TXT视为同一类型) var groupedFiles = files .GroupBy(file => Path.GetExtension(file), StringComparer.OrdinalIgnoreCase); // 遍历分组结果 foreach (var group in groupedFiles) { Console.WriteLine($"扩展名: {group.Key},文件总数: {group.Count()}"); foreach (var filePath in group) { Console.WriteLine($" {filePath}"); } }
方式2:使用FileInfo
var groupedFiles = files .Select(file => new FileInfo(file)) .GroupBy(fi => fi.Extension, StringComparer.OrdinalIgnoreCase); // 遍历分组结果 foreach (var group in groupedFiles) { Console.WriteLine($"扩展名: {group.Key},文件总数: {group.Count()}"); foreach (var fileInfo in group) { Console.WriteLine($" {fileInfo.FullName}"); } }
按文件类型排序
方式1:使用Path.GetExtension
// 先按扩展名排序(忽略大小写),再按文件名排序 var sortedFiles = files .OrderBy(file => Path.GetExtension(file), StringComparer.OrdinalIgnoreCase) .ThenBy(file => Path.GetFileName(file)); // 遍历排序后的结果 foreach (var filePath in sortedFiles) { Console.WriteLine($"{Path.GetExtension(filePath)} - {filePath}"); }
方式2:使用FileInfo
var sortedFiles = files .Select(file => new FileInfo(file)) .OrderBy(fi => fi.Extension, StringComparer.OrdinalIgnoreCase) .ThenBy(fi => fi.Name); // 遍历排序后的结果 foreach (var fileInfo in sortedFiles) { Console.WriteLine($"{fileInfo.Extension} - {fileInfo.FullName}"); }
说明:StringComparer.OrdinalIgnoreCase用于忽略扩展名的大小写差异,如果需要严格区分大小写,直接去掉该参数即可。
内容的提问来源于stack exchange,提问作者Julia Navarro
相关产品推荐
相关产品推荐

