2012-07-17 50 views
3

我有圖片的文件夾:組文件根據它們的前綴

文件夾1:

文件:

ABC-138923 
ABC-3223 
ABC-33489 
ABC-3111 
CBA-238923 
CBA-1313 
CBA-1313 
DAC-38932 
DAC-1111 
DAC-13893 
DAC-23232 
DAC-9999 

我想通過這個文件夾並計算每張圖片預先修復的數量。

例如,前綴ABC的4張圖片和上面的3張前綴CBA的圖片。

我很難弄清楚如何循環瀏覽。任何人都可以幫我一把嗎?

回答

3

不是循環,但更清晰可讀:

string[] fileNames = ...; //some initializing code 
var prefixes = fileNames.GroupBy(x => x.Split('-')[0]). 
    Select(y => new {Prefix = y.Key, Count = y.Count()}); 

UPD:

顯示每個前綴計數:

foreach (var prefix in prefixes) 
{ 
    Console.WriteLine("Prefix: {0}, Count: {1}", prefix.Prefix, prefix.Count); 
} 
+0

錯誤'System.Linq.IGrouping '不包含'Value'的定義,也沒有接受類型爲'System.Linq.IGrouping 的第一個參數的擴展方法'Value' '可以找到(你是否缺少使用指令或程序集引用?) – Testifier 2012-07-17 16:04:16

+0

@ user1336632,我的錯。現在修好了。 – 2kay 2012-07-17 16:12:42

+0

即時通訊不熟悉這段代碼(對不起還是一個noobie),但我該如何獲得每個預修補程序的計數,以便從您的代碼中將其顯示給用戶? – Testifier 2012-07-17 16:43:35

0

算法:

  1. 創建詞典:

    Dictionary<string, int> D;

  2. 循環遍歷目錄使用:

    foreach (var file in System.IO.Directory.GetFiles(dir)) ...

完成以下3個步驟爲每個文件:

  1. 提取前綴,看看是否匹配的鑰匙D存在。如果爲真,則轉到步驟3.
  2. 插入前綴爲D一個新的密鑰,以價值0
  3. 增量的鍵值由1

要在整個目錄已處理的顯示結果:

foreach (KeyValuePair<string, int> pair in D) 
    Console.WriteLine("{0} prefix has {1} files", pair.Key, pair.Value); 
+0

C#!對不起忘了補充一下。 – Testifier 2012-07-17 15:41:40

+0

@ user1336632 - 發佈一個算法示例,您應該可以使用它來實現您的應用程序。 – Unsigned 2012-07-17 17:32:10

0
在C#

using System.IO; 
using System.Collections.Generic; 

... 

      DirectoryInfo dir = new DirectoryInfo("C:\\yourfolder"); 
      FileInfo[] files = dir.GetFiles(); 
      List<string> prefix = new List<string>(); 
      List<int> count = new List<int>(); 

      foreach (FileInfo file in files) 
      { 
       if (prefix.Count > 0) 
       { 
        Boolean AddNew = true; 
        for (int i = 0; i < prefix.Count; i++) 
        { 
         if (file.Name.Substring(0, 3) == prefix[i]) 
         { 
          count[i]++; 
          AddNew = false; 
         } 
        } 
        if (AddNew) 
        { 
         prefix.Add(file.Name.Substring(0, 3)); 
         count.Add(1); 
        } 
       } 
       else 
       { 
        prefix.Add(file.Name.Substring(0, 3)); 
        count.Add(1); 
       } 
      } 

... 

前綴字符串列表是平行於數列表,以便訪問您可以遍歷數組。我沒有測試或優化它,但如果你正在走這條路線(C#),這可能是一個開始。

1

這是一個 '的foreach' 循環:

var directoryPath = ".\Folder1\"; 
var prefixLength = 3; 
var accumulator = new Dictionary<string, int>(); 

foreach (var file in System.IO.Directory.GetFiles(directoryPath)) { 
    var prefix = filefile.Replace(directoryPath, string.Empty).Substring(0, prefixLength); 

    if (!accumulator.ContainsKey(prefix)) 
    { 
     accumulator.Add(prefix, 0); 
    } 

    accumulator[prefix]++; 
} 

foreach(var prefix in accumulator.Keys) { 
    Console.WriteLine("{0}: {1}", prefix, accumulator[prefix]); 
}