我有一个包含图片的文件夹:
文件夹 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
我想浏览这个文件夹并计算我拥有的每张图片前缀的数量。
比如上面有4张prefix ABC图片和3张prefix CBA图片。
我很难弄清楚如何遍历这个。任何人都可以帮我一把吗?
不是循环,但更清晰易读:
string[] fileNames = ...; //some initializing code
var prefixes = fileNames.GroupBy(x => x.Split('-')[0]).
Select(y => new {Prefix = y.Key, Count = y.Count()});
更新:
要显示每个前缀的计数:
foreach (var prefix in prefixes)
{
Console.WriteLine("Prefix: {0}, Count: {1}", prefix.Prefix, prefix.Count);
}
这是一个'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]);
}
在 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#) 前进,这可能是一个开始。
算法:
创建字典:
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);