按拆分结果对列表进行分组

Grouping a list by the results of a split

所以我在列表中有一些字符串

Folder1\File.png
Folder1\File2.png
File3.png
File4.png

我想将这些分组到 split('\')[0]; 例如

foreach (var group in files.GroupBy(x => //mysplit))
{
   if (group.Count() > 1)
   {
      // this is a folder and its files are: group
   }
   else
   {
      //group is an individual file
   }
}

但我不确定如何按此拆分对文件进行分组?

我只会将 Contains() 反斜杠的项目分组:

var lst1 = new string[] {"Folder1\File.png", "Folder1\File2.png" , "File3.png", "File4.png" };
var grps = lst1.GroupBy(x => x.Contains(@"\"));
foreach (var g in grps)
{
    if (g.Key) // we have a path with directory
        Console.WriteLine(String.Join("\r\n", g.ToList()));
    else // we have an individual file
         Console.WriteLine(String.Join("\r\n", g.ToList()));
}

所以我的解决方案是:

foreach (var groupedFiles in files.GroupBy(s => s.Split('\')[0]))
{
     if (Path.GetExtension(groupedFiles.Key) == string.Empty)
     {
          //this is a folder
          var folder = groupedFiles.Key;
          var folderFiles = groupedFiles.ToList();
     }
     else
     {
          //this is a file
          var file = groupedFiles.First();
     }
}