一般来说,我是 C# 和面向对象编程的新手。我有一个解析非常大的文本文件的应用程序。
我有两个字典:
Dictionary<string, string> parsingDict //key: original value, value: replacement
Dictionary<int, string> Frequency // key: count, value: counted string
我正在寻找每个键的频率。我能够获得所需的输出,即:
System1 已被 MachineA 替换 5 次
System2 已被 MachineB 替换 7 次
System3 已被 MachineC 替换 10 次
System4 已被 MachineD 替换 19 次
以下是我的代码:
String[] arrayofLine = File.ReadAllLines(File);
foreach (var replacement in parsingDict.Keys)
{
for (int i = 0; i < arrayofLine.Length; i++)
{
if (arrayofLine[i].Contains(replacement))
{
countr++;
Frequency.Add(countr, Convert.ToString(replacement));
}
}
}
Frequency = Frequency.GroupBy(s => s.Value)
.Select(g => g.First())
.ToDictionary(kvp => kvp.Key, kvp => kvp.Value); //Get only the distinct records.
foreach (var freq in Frequency)
{
sbFreq.AppendLine(string.Format("The text {0} was replaced {2} time(s) with {1} \n",
freq.Value, parsingDict[freq.Value],
arrayofLine.Where(x => x.Contains(freq.Value)).Count()));
}
使用String[] arrayofLine = File.ReadAllLines(File);
会增加内存利用率。
arrayofLine.Where (x => x.Contains(freq.Value)).Count())如何使用 File.ReadLine 来实现,因为它是内存友好的。