我有一个包含文件名列表的目录。
VAH007157100-pic1.jpg
VAH007157100-pic2.jpg
VAH007157100-pic3.jpg
WAZ009999200-pic1.jpg
WAZ009999200-pic2.jpg
WAZ009999200-pic3.jpg
我想知道子串的明显计数(0,12)。
由于某种原因,这不起作用:
string[] originalFiles = Directory.GetFiles(SelectedDirectory);
private int GetDistinctPolicyCountInDirectory()
{
var prefixes = originalFiles
.GroupBy(x => x.Substring(0, 12))
.Select(y => new { Policy = y.Key, Count = y.Count() });
return prefixes.Count();
}
我一直都是0.我在这里错过了什么吗?
请注意,我不想进行拆分以将数字分开。我想通过子串来做到这一点。
更新 -
private int GetDistinctPolicyCountInDirectory(string[] originalFiles)
{
var count = originalFiles.Distinct(x => Path.GetFileName(x).Substring(0, 12)).Count();
return Convert.ToInt32(count);
}
我在这里遇到错误,它说:错误1无法将lambda表达式转换为类型'System.Collections.Generic.IEqualityComparer',因为它不是委托类型
答案 0 :(得分:6)
我只考虑使用.Distinct()
。
此外,您还需要将其删除到文件名而不是完整的文件路径。
originalFiles.Select(x => Path.GetFileName(x).Substring(0, 12))
.Distinct().Count();
答案 1 :(得分:2)
GetFiles
返回包含完整路径的文件名数组,包括目录。您只想比较文件名,因此您应该考虑使用Path.GetFileName
。
GroupBy(x => Path.GetFileName(x).Substring(0, 12));