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]
Était-ce utile?

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 écrire Map<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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top