【问题标题】:C# getting sorted list of images [duplicate]C#获取图像的排序列表[重复]
【发布时间】:2016-09-02 04:42:56
【问题描述】:

我正在尝试在一个实用目录中获取图像路径字符串的排序列表。 该目录包含 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() 方法,但没有成功。

正在寻找解决方案。

谢谢。

【问题讨论】:

  • 按字母顺序正确,数字不正确。

标签: c# linq list


【解决方案1】:

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

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

如果不使用Split,您可以使用斯科特的建议使用GetFileNameWithoutExtension

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

请记住,这是一个幼稚的解决方案,它假定所有文件名都是(number).png。如果不是,你可以先检查它是否是一个数字,然后解析

【讨论】:

  • 我会使用 `.OrderBy(f => int.Parse(Path.GetFileNameWithoutExtension(f)));但几乎正是我要发布的内容。
  • @ScottChamberlain 好建议 :) 喜欢,会更新。谢谢
猜你喜欢
  • 2017-08-20
  • 2017-02-04
  • 2019-09-18
  • 1970-01-01
  • 2018-10-12
  • 1970-01-01
  • 1970-01-01
  • 2013-09-25
  • 2014-10-27
相关资源
最近更新 更多