Maison > développement back-end > C++ > Comment puis-je implémenter efficacement un dictionnaire multi-clés en C# ?

Comment puis-je implémenter efficacement un dictionnaire multi-clés en C# ?

DDD
Libérer: 2025-01-08 19:11:53
original
385 Les gens l'ont consulté

How Can I Efficiently Implement a Multi-Key Dictionary in C#?

Méthode d'implémentation du dictionnaire multi-clés C#

La bibliothèque de classes de base (BCL) .NET ne dispose pas de dictionnaire multi-clés intégré, mais certaines options open source sont disponibles.

Utiliser des tuples comme clés

Une approche courante consiste à utiliser des tuples comme clés. Cependant, cette méthode présente quelques inconvénients :

  • L'implémentation par défaut de GetHashCode ne prend en compte que le premier champ, ce qui entraîne des problèmes potentiels d'évolutivité.
  • Les valeurs nulles compliquent les choses.

Structure de tuple personnalisée

Pour contourner ces limitations, vous pouvez définir une structure de tuple personnalisée :

<code class="language-csharp">public struct Tuple<T1, T2>
{
    public readonly T1 Item1;
    public readonly T2 Item2;
    public Tuple(T1 item1, T2 item2) { Item1 = item1; Item2 = item2; }
}</code>
Copier après la connexion

Cela fournit l'immuabilité, des codes de hachage pré-calculés et des comparaisons d'égalité. La meilleure pratique consiste à placer les champs les plus distinctifs dans le premier élément.

La bibliothèque ValueUtils implémente un meilleur algorithme de hachage

La bibliothèque ValueUtils fournit une méthode FieldwiseHasher.Hash, qui peut créer un code de hachage plus fiable pour la structure et résout le problème de la mauvaise implémentation de GetHashCode pour les tuples.

Les objets à valeur nommée améliorent la lisibilité

ValueUtils permet également l'utilisation de champs nommés dans des clés multi-champs, améliorant ainsi la lisibilité du code :

<code class="language-csharp">sealed class MyValueObject : ValueObject<MyValueObject>
{
    public DayOfWeek day;
    public string NamedPart;
}</code>
Copier après la connexion

Avec cette approche, les données avec une sémantique de valeur peuvent avoir à la fois des membres nommés et des codes de hachage corrects jusqu'à ce que la prise en charge native des tuples nommés avec de bons codes de hachage soit implémentée dans une future version C#.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal