Maison > développement back-end > C++ > Comment récupérer plusieurs clés associées à une valeur spécifique dans un dictionnaire générique ?

Comment récupérer plusieurs clés associées à une valeur spécifique dans un dictionnaire générique ?

Mary-Kate Olsen
Libérer: 2025-01-21 03:37:10
original
607 Les gens l'ont consulté

How to Retrieve Multiple Keys Associated with a Specific Value in a Generic Dictionary?

Obtenir plusieurs clés pour une valeur spécifique dans un dictionnaire générique

En .NET, récupérer la valeur associée à une clé dans un dictionnaire générique est très simple. Cependant, déterminer la clé d’une valeur donnée n’est pas simple, surtout lorsque plusieurs clés peuvent correspondre à la même valeur.

Question

Considérez l'extrait de code suivant :

<code class="language-csharp">Dictionary<int, string> greek = new Dictionary<int, string>();
greek.Add(1, "Alpha");
greek.Add(2, "Beta");

int[] betaKeys = greek.WhatDoIPutHere("Beta"); // 预期结果为单个 2</code>
Copier après la connexion

Le but est d'obtenir un tableau contenant des clés qui correspondent à la valeur "Beta".

Solution

Nous pouvons créer un dictionnaire bidirectionnel personnalisé capable de récupérer des clés et des valeurs :

<code class="language-csharp">using System;
using System.Collections.Generic;
using System.Linq;

class BiDictionary<TFirst, TSecond>
{
    private IDictionary<TFirst, IList<TSecond>> firstToSecond = new Dictionary<TFirst, IList<TSecond>>();
    private IDictionary<TSecond, IList<TFirst>> secondToFirst = new Dictionary<TSecond, IList<TFirst>>();

    public void Add(TFirst first, TSecond second)
    {
        IList<TSecond> seconds;
        IList<TFirst> firsts;

        if (!firstToSecond.TryGetValue(first, out seconds))
        {
            seconds = new List<TSecond>();
            firstToSecond[first] = seconds;
        }

        if (!secondToFirst.TryGetValue(second, out firsts))
        {
            firsts = new List<TFirst>();
            secondToFirst[second] = firsts;
        }

        seconds.Add(second);
        firsts.Add(first);
    }

    public IEnumerable<TSecond> GetByFirst(TFirst first)
    {
        IList<TSecond> list;
        return firstToSecond.TryGetValue(first, out list) ? list : Enumerable.Empty<TSecond>();
    }

    public IEnumerable<TFirst> GetBySecond(TSecond second)
    {
        IList<TFirst> list;
        return secondToFirst.TryGetValue(second, out list) ? list : Enumerable.Empty<TFirst>();
    }
}</code>
Copier après la connexion

Pour utiliser ce dictionnaire bidirectionnel, on peut remplacer le code de l'exemple précédent par :

<code class="language-csharp">BiDictionary<int, string> greek = new BiDictionary<int, string>();
greek.Add(1, "Alpha");
greek.Add(2, "Beta");
greek.Add(5, "Beta");

IEnumerable<int> betaKeys = greek.GetBySecond("Beta");

foreach (int key in betaKeys)
{
    Console.WriteLine(key); // 2, 5
}</code>
Copier après la connexion

Cette solution fournit effectivement un moyen de récupérer toutes les clés associées à une valeur spécifiée dans un dictionnaire à valeurs multiples.

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal