IEnumerable
をルックアップまたは辞書のような構造に変換する最良の方法は何ですか?ただし、値ごとに複数のキーがありますか?
私が探しているのは、これとほぼ同じことを一般的な方法で行うものです。
var wordsByLetter = new Dictionary<char, HashSet<string>>();
foreach (string word in words)
{
foreach (char letter in word.Distinct())
{
if (!wordsByLetter.ContainsKey(letter))
{
wordsByLetter.Add(letter, new HashSet<string>());
}
wordsByLetter[letter].Add(word);
}
}
したがって、結果は、使用される各文字をその文字を含む一連の単語にマッピングする辞書です。
たとえば、words
含まれている{"foo", "faz", "zoo"}
場合、結果の辞書には次のものが含まれます。
'a' -> {"faz"}
'f' -> {"foo", "faz"}
'o' -> {"foo", "zoo"}
'z' -> {"faz", "zoo"}
コード例を拡張メソッドに変えることはできますが、使用する組み込み関数またはより優れたアルゴリズムはありますか?