检查强制数组的列表元素部分

Check list element parts for mandatory array

我有一个字符串列表,其中包含名称相同但扩展名不同的文件和一组扩展名。 每个文件名都必须有每个扩展名,我想输出所有缺失的对。 有好的 LINQ 吗?

var files = new List<string>() { "file2.jpg", "file1.jpg", "file1.png", "file2.bmp", "file3.png", "file1.bmp" };
var exts = new[] { ".png", ".bmp", ".jpg" };

结果一定是这样

file2 missing .png
file3 missing .bmp, .jpg
 var files = new List<string>() { "file2.jpg", "file1.jpg", "file1.png", "file2.bmp", "file3.png", "file1.bmp" };
        var exts = new[] { ".png", ".bmp", ".jpg" };

        var fileGroups = files
            .GroupBy(c => Path.GetFileNameWithoutExtension(c), v => Path.GetExtension(v))
            .Select(x => new { File = x.Key, MissingExts = exts.Except(x) })
            .Where(x=> x.MissingExts.Any());
        
        foreach(var group in fileGroups)
        {
            Console.WriteLine($"{group.File} {string.Join(' ', group.MissingExts)}");
        }

Serhii 的回答足够有效。 无论如何,如果这些文件不只在内部使用,我建议检查双重扩展名。这个问题有几个 plug-and-play 解决方案。