structure de données pour les données multi-clé?
-
20-08-2019 - |
Question
Existe-t-il une structure de données couramment utilisée pour les données à plusieurs clés? par exemple. (key1, key2, ..., keyN) - > valeur. J'avais l'habitude d'utiliser des dictionnaires de dictionnaires (en c #), puis d'écrire mon propre wrapper par dessus pour rendre la syntaxe plus agréable. mais il semble que je doive toujours écrire un wrapper pour chaque N-dictionnaire, où N est le nombre de clés, car je dois définir la structure de dictionnaire imbriquée dans le code.
En supposant que j'utilise c #, existe-t-il une structure de données qui encapsule mieux ce type d'utilisation et peut contenir un nombre arbitraire de clés offrant des performances similaires à celles d'une table de hachage? Je ne peux pas simplement combiner toutes les clés en une clé unique car je dois pouvoir faire quelque chose comme
foreach key2 in data[key1]
foreach key3 in data[key1][key2]
foreach key4 in data[key1][key2][key3]
La solution
Non, ce n'est pas le cas.
Sans compromettre la sécurité du type, il existe deux solutions.
- Dictionnaires de dictionnaires -
Dictionary<T1, Dictionary<T2, TRes>>
- Dictionnaires des n-uplets -
Dictionary<Tuple3<T1, T2, T3>, Res>
. Notez que, contrairement à F # où vous pourriez écrireMap<T1 * T2 * T3, Res>
- C # n’a pas de type de tuple intégré - vous devez l’implémenter séparément en tant que classe ou structure générique.
Mais en ce qui concerne votre exemple de code, les dictionnaires dentaires (dictionnaires de dictionnaires) sont la seule alternative.