C#获取图像的排序列表

时间:2016-09-01 20:37:59

标签: c# linq list

我正在尝试在特定目录中获取图像路径字符串的排序列表。 该目录包含43个以数字命名的图像:“1.png”,“2. png”,依此类推。

这是我的代码:

  var sorted = Directory.GetFiles(Directory.GetCurrentDirectory(), "*.png").OrderBy(f => f);           
  foreach (string img in sorted) 
  {
   Console.WriteLine(img);
  } 

我得到的结果

  

C:\ Users \ itapi \ OneDrive \מסמכים\ Visual Studio 2013 \ Projects \ Draw \ Draw \ bin \ Debug \ 1.png   C:\ Users \ itapi \ OneDrive \מסמכים\ Visual Studio 2013 \ Projects \ Draw \ Draw \ bin \ Debug \ 10.png   C:\ Users \ itapi \ OneDrive \מסמכים\ Visual Studio 2013 \ Projects \ Draw \ Draw \ bin \ Debug \ 11.png   C:\ Users \ itapi \ OneDrive \מסמכים\ Visual Studio 2013 \ Projects \ Draw \ Draw \ bin \ Debug \ 12.png   C:\ Users \ itapi \ OneDrive \מסמכים\ Visual Studio 2013 \ Projects \ Draw \ Draw \ bin \ Debug \ 13.png   C:\ Users \ itapi \ OneDrive \מסמכים\ Visual Studio 2013 \ Projects \ Draw \ Draw \ bin \ Debug \ 14.png   C:\ Users \ itapi \ OneDrive \מסמכים\ Visual Studio 2013 \ Projects \ Draw \ Draw \ bin \ Debug \ 15.png   C:\ Users \ itapi \ OneDrive \מסמכים\ Visual Studio 2013 \ Projects \ Draw \ Draw \ bin \ Debug \ 16.png   C:\ Users \ itapi \ OneDrive \מסמכים\ Visual Studio 2013 \ Projects \ Draw \ Draw \ bin \ Debug \ 17.png   C:\ Users \ itapi \ OneDrive \מסמכים\ Visual Studio 2013 \ Projects \ Draw \ Draw \ bin \ Debug \ 18.png   C:\ Users \ itapi \ OneDrive \מסמכים\ Visual Studio 2013 \ Projects \ Draw \ Draw \ bin \ Debug \ 19.png   C:\ Users \ itapi \ OneDrive \מסמכים\ Visual Studio 2013 \ Projects \ Draw \ Draw \ bin \ Debug \ 2.png   C:\ Users \ itapi \ OneDrive \מסמכים\ Visual Studio 2013 \ Projects \ Draw \ Draw \ bin \ Debug \ 20.png   C:\ Users \ itapi \ OneDrive \מסמכים\ Visual Studio 2013 \ Projects \ Draw \ Draw \ bin \ Debug \ 21.png   C:\ Users \ itapi \ OneDrive \מסמכים\ Visual Studio 2013 \ Projects \ Draw \ Draw \ bin \ Debug \ 22.png   C:\ Users \ itapi \ OneDrive \מסמכים\ Visual Studio 2013 \ Projects \ Draw \ Draw \ bin \ Debug \ 23.png   C:\ Users \ itapi \ OneDrive \מסמכים\ Visual Studio 2013 \ Projects \ Draw \ Draw \ bin \ Debug \ 24.png   C:\ Users \ itapi \ OneDrive \מסמכים\ Visual Studio 2013 \ Projects \ Draw \ Draw \ bin \ Debug \ 25.png   C:\ Users \ itapi \ OneDrive \מסמכים\ Visual Studio 2013 \ Projects \ Draw \ Draw \ bin \ Debug \ 26.png   C:\ Users \ itapi \ OneDrive \מסמכים\ Visual Studio 2013 \ Projects \ Draw \ Draw \ bin \ Debug \ 27.png   C:\ Users \ itapi \ OneDrive \מסמכים\ Visual Studio 2013 \ Projects \ Draw \ Draw \ bin \ Debug \ 28.png   C:\ Users \ itapi \ OneDrive \מסמכים\ Visual Studio 2013 \ Projects \ Draw \ Draw \ bin \ Debug \ 29.png   C:\ Users \ itapi \ OneDrive \מסמכים\ Visual Studio 2013 \ Projects \ Draw \ Draw \ bin \ Debug \ 3.png   C:\ Users \ itapi \ OneDrive \מסמכים\ Visual Studio 2013 \ Projects \ Draw \ Draw \ bin \ Debug \ 30.png   C:\ Users \ itapi \ OneDrive \מסמכים\ Visual Studio 2013 \ Projects \ Draw \ Draw \ bin \ Debug \ 31.png   C:\ Users \ itapi \ OneDrive \מסמכים\ Visual Studio 2013 \ Projects \ Draw \ Draw \ bin \ Debug \ 32.png   C:\ Users \ itapi \ OneDrive \מסמכים\ Visual Studio 2013 \ Projects \ Draw \ Draw \ bin \ Debug \ 33.png   C:\ Users \ itapi \ OneDrive \מסמכים\ Visual Studio 2013 \ Projects \ Draw \ Draw \ bin \ Debug \ 34.png   C:\ Users \ itapi \ OneDrive \מסמכים\ Visual Studio 2013 \ Projects \ Draw \ Draw \ bin \ Debug \ 35.png   C:\ Users \ itapi \ OneDrive \מסמכים\ Visual Studio 2013 \ Projects \ Draw \ Draw \ bin \ Debug \ 36.png   C:\ Users \ itapi \ OneDrive \מסמכים\ Visual Studio 2013 \ Projects \ Draw \ Draw \ bin \ Debug \ 37.png   C:\ Users \ itapi \ OneDrive \מסמכים\ Visual Studio 2013 \ Projects \ Draw \ Draw \ bin \ Debug \ 38.png   C:\ Users \ itapi \ OneDrive \מסמכים\ Visual Studio 2013 \ Projects \ Draw \ Draw \ bin \ Debug \ 39.png   C:\ Users \ itapi \ OneDrive \מסמכים\ Visual Studio 2013 \ Projects \ Draw \ Draw \ bin \ Debug \ 4.png   C:\ Users \ itapi \ OneDrive \מסמכים\ Visual Studio 2013 \ Projects \ Draw \ Draw \ bin \ Debug \ 40.png   C:\ Users \ itapi \ OneDrive \מסמכים\ Visual Studio 2013 \ Projects \ Draw \ Draw \ bin \ Debug \ 41.png   C:\ Users \ itapi \ OneDrive \מסמכים\ Visual Studio 2013 \ Projects \ Draw \ Draw \ bin \ Debug \ 42.png   C:\ Users \ itapi \ OneDrive \מסמכים\ Visual Studio 2013 \ Projects \ Draw \ Draw \ bin \ Debug \ 43.png   C:\ Users \ itapi \ OneDrive \מסמכים\ Visual Studio 2013 \ Projects \ Draw \ Draw \ bin \ Debug \ 5.png   C:\ Users \ itapi \ OneDrive \מסמכים\ Visual Studio 2013 \ Projects \ Draw \ Draw \ bin \ Debug \ 6.png   C:\ Users \ itapi \ OneDrive \מסמכים\ Visual Studio 2013 \ Projects \ Draw \ Draw \ bin \ Debug \ 7.png   C:\ Users \ itapi \ OneDrive \מסמכים\ Visual Studio 2013 \ Projects \ Draw \ Draw \ bin \ Debug \ 8.png   C:\ Users \ itapi \ OneDrive \מסמכים\ Visual Studio 2013 \ Projects \ Draw \ Draw \ bin \ Debug \ 9.png

出于某种原因,我无法获得正确的按字母顺序排序的列表,我也尝试使用LINQ Sort()方法,但没有成功。

寻找解决方案。

感谢。

1 个答案:

答案 0 :(得分:2)

原因是它是一个字符串,因此它按字符串排序规则排序。你想要做的是取数字部分并按顺序排序:

Directory.GetFiles(Directory.GetCurrentDirectory(), "*.png")
         .OrderBy(f => int.Parse(f.Split('.')[0])); 

如果不使用Split,您可以使用Scott的建议来使用GetFileNameWithoutExtension

Directory.GetFiles(Directory.GetCurrentDirectory(), "*.png")
         .OrderBy(f => int.Parse(Path.GetFileNameWithoutExtension(f))); 

请记住,这是一个天真的解决方案,假设所有文件名都是(number).png。如果不是这种情况,您可以先检查它是否为数字,然后解析