textBox.Lines = ReplaceWithAcronyms(textBox.Lines, File.ReadAllLines(acronymsPath)).ToArray();
private static IEnumerable<string> ReplaceWithAcronyms(IEnumerable<string> lines, IEnumerable<string> acronyms)
{
foreach (string line in lines)
{
yield return string.Join(" ",
line.Split(' ').Select(word => ReplaceWithAcronym(word, acronyms)));
}
}
private static string ReplaceWithAcronym(string word, IEnumerable<string> acronyms)
{
string acronym = acronyms.FirstOrDefault(ac => ac == word.ToUpperInvariant());
if (acronym == null)
{
return word;
}
return acronym;
}
ReplaceWithAcronyms 获取文本框的行和文件的行,其中每一行都是一个首字母缩写词。然后它将每一行拆分为单词并将每个单词传递给 ReplaceWithAcronym。如果单词是首字母缩略词之一,它将返回,否则将返回单词不变。通过使用 string.Join,单词是“未拆分的”。结果被转换为一个数组,然后分配回文本框行。
我没有检查数百行的速度有多快。为了提高性能,您可以使用 HashSet 作为首字母缩写词。我不认为几百行真的是个问题。在尝试提高性能之前,我会尝试一下。也许已经足够好了。