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 は、テキスト ボックスの行と、各行が 1 つの頭字語であるファイルの行を取得します。次に、各行を単語に分割し、各単語を ReplaceWithAcronym に渡します。単語が頭字語の 1 つである場合は、それ以外の場合は単語を変更せずに返します。単語は、string.Join を使用して「分割されていません」。結果は配列に変換され、テキスト ボックスの行に割り当てられます。
数百行でどれだけ速いかは確認していません。パフォーマンスを向上させるために、頭字語に HashSet を使用できます。数百行が実際に問題になるとは思いません。パフォーマンスを改善しようとする前に、試してみます。多分それはもう十分です。