Quelle est la meilleure façon de transformer un IEnumerable
en une structure de type recherche ou dictionnaire, mais avec plusieurs clés par valeur?
Ce que je suis à la recherche est quelque chose qui fait à peu près la même chose que cela, et d'une manière générique:Conversion d'un IEnumerable en une recherche avec plusieurs clés par valeur
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);
}
}
Ainsi, le résultat est une application dictionnaire chaque lettre utilisée pour l'ensemble des mots qui contiennent que lettre.
Par exemple, si words
contenait {"foo", "faz", "zoo"}
alors le dictionnaire résultant contiendrait:
'a' -> {"faz"}
'f' -> {"foo", "faz"}
'o' -> {"foo", "zoo"}
'z' -> {"faz", "zoo"}
je pourrais tourner mon exemple de code dans une méthode d'extension, mais est-il une fonction intégrée ou meilleur algorithme à utiliser?
Comment comptez-vous utiliser cette structure de données? Que voulez-vous dire par plusieurs clés par valeur dans ce cas? –
@lpthnc: J'ai modifié la question pour essayer de clarifier. – Whatsit
Je modifie ma réponse après l'avoir acceptée, vous pourriez être intéressé par la nouvelle version ... –