2014-05-16 22 views
-6
files = Directory.GetFiles(mainpath, "animated*.gif", SearchOption.AllDirectories); 
      Array.Sort(files); 
      foreach (string str in files) 
      { 
       Console.Write(str + " "); 
      } 

文件是字符串[] 文件包含每个索引文件中的51个索引。 例如,在索引0我看到:如何排列数组:string []?

c:\temp\newimages\Changed_Resolution_By_10\SecondProcess_-Width = 102 Height = 102\animated102x102.gif 

在索引1我看到:

"c:\temp\newimages\Changed_Resolution_By_10\SecondProcess_-Width = 112 Height = 112\animated112x112.gif" 

指数2:

"c:\temp\newimages\Changed_Resolution_By_10\SecondProcess_-Width = 12 Height = 12\animated12x12.gif" 

它应该启动索引0将是:

"c:\temp\newimages\Changed_Resolution_By_10\SecondProcess_-Width = 502 Height = 502\animated502x502.gif" 

索引1:

"c:\temp\newimages\Changed_Resolution_By_10\SecondProcess_-Width = 492 Height = 492\animated492x492.gif" 

而最后的指数将是:

"c:\temp\newimages\Changed_Resolution_By_10\SecondProcess_-Width = 2 Height = 2\animated2x2.gif" 

这应该是秩序。但现在它都是一团糟。 所以我试图使用Array.Sort,但它不工作。

我也有这个方法,我之前用于排序:

private void Walkdirectoryfulldepth(string dirPath) 
     { 
      data = new List<string>(); 
      DirectoryInfo dirInfo = new DirectoryInfo(dirPath); 
      var sorted = dirInfo.GetDirectories("*.*", SearchOption.TopDirectoryOnly).ToList(); 
      DirectoryInfo[] subDirs = dirInfo.GetDirectories("*.*", SearchOption.TopDirectoryOnly); 
      string[] strDir = new string[subDirs.Count()]; 
      int i = 0; 
      foreach (var item in subDirs) 
      { 
       strDir[i] = item.FullName; 
       i++; 
      } 
      NumericComparer nc = new NumericComparer(); 
      Array.Sort(strDir, nc); 
      foreach (var item in strDir) 
      { 
       data.Add(Path.GetFileName(item)); 
      } 
     } 

但这种方法得到的字符串不是字符串[] 我想要的到底是该变量的文件将继续是string [],但排序。

我怎样才能使另一种方法像Walkdirectoryfulldepth,但这次它会接受字符串[]?

+0

你的意思是你想降序排序? 5还会在1之前出现吗? –

+0

订单是正确的。如果您想要降序排列,请在排序后使用.Reverse()。 –

+0

如果你data.sort(),你会得到什么? – Bit

回答

1

你可以尝试以下

string[] strarr = new string[] { @"c:\temp\newimages\Changed_Resolution_By_10\SecondProcess_-Width = 502 Height = 502\animated502x502.gif", @"c:\temp\newimages\Changed_Resolution_By_10\SecondProcess_-Width = 492 Height = 492\animated492x492.gif", @"c:\temp\newimages\Changed_Resolution_By_10\SecondProcess_-Width = 2 Height = 2\animated2x2.gif" }; 
IEnumerable<string> strTest = strarr.OrderByDescending(p => p.Substring(p.IndexOf("x"), p.Length - p.IndexOf("."))); 
0

如果你想要做的,不只是排序对整个string(其中调用Reverse()是最好的选择),你可以使用这样的事情:

IOrderedEnumerable<string> asc = files.OrderBy(x => x); 

IOrderedEnumerable<string> desc = files.OrderByDescending(x => x); 

里面的lambda表达式,您可以创建排序按照你想要的方式来管理,比如从文件名中剥离一些文本并对其余部分进行排序)。