我有圖片的文件夾:組文件根據它們的前綴
文件夾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的圖片。
我很難弄清楚如何循環瀏覽。任何人都可以幫我一把嗎?
我有圖片的文件夾:組文件根據它們的前綴
文件夾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的圖片。
我很難弄清楚如何循環瀏覽。任何人都可以幫我一把嗎?
不是循環,但更清晰可讀:
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);
}
算法:
創建詞典:
Dictionary<string, int> D;
循環遍歷目錄使用:
foreach (var file in System.IO.Directory.GetFiles(dir)) ...
完成以下3個步驟爲每個文件:
D
存在。如果爲真,則轉到步驟3.D
一個新的密鑰,以價值0
1
要在整個目錄已處理的顯示結果:
foreach (KeyValuePair<string, int> pair in D)
Console.WriteLine("{0} prefix has {1} files", pair.Key, pair.Value);
,
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#),這可能是一個開始。
這是一個 '的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]);
}
錯誤'System.Linq.IGrouping'不包含'Value'的定義,也沒有接受類型爲'System.Linq.IGrouping 的第一個參數的擴展方法'Value' '可以找到(你是否缺少使用指令或程序集引用?) –
Testifier
2012-07-17 16:04:16
@ user1336632,我的錯。現在修好了。 – 2kay 2012-07-17 16:12:42
即時通訊不熟悉這段代碼(對不起還是一個noobie),但我該如何獲得每個預修補程序的計數,以便從您的代碼中將其顯示給用戶? – Testifier 2012-07-17 16:43:35