2014-05-16 58 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表達式,您可以創建排序按照你想要的方式來管理,比如從文件名中剝離一些文本並對其餘部分進行排序)。