Heim > Backend-Entwicklung > C++ > Wie rufe ich mehrere Schlüssel ab, die einem bestimmten Wert in einem generischen Wörterbuch zugeordnet sind?

Wie rufe ich mehrere Schlüssel ab, die einem bestimmten Wert in einem generischen Wörterbuch zugeordnet sind?

Mary-Kate Olsen
Freigeben: 2025-01-21 03:37:10
Original
607 Leute haben es durchsucht

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

Erhalten Sie mehrere Schlüssel für einen bestimmten Wert in einem generischen Wörterbuch

In .NET ist das Abrufen des mit einem Schlüssel verknüpften Werts in einem generischen Wörterbuch sehr einfach. Allerdings ist es nicht einfach, den Schlüssel eines bestimmten Werts zu bestimmen, insbesondere wenn mehrere Schlüssel demselben Wert entsprechen können.

Frage

Bedenken Sie den folgenden Codeausschnitt:

<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>
Nach dem Login kopieren

Das Ziel besteht darin, ein Array mit Schlüsseln zu erhalten, die dem Wert „Beta“ zugeordnet sind.

Lösung

Wir können ein benutzerdefiniertes bidirektionales Wörterbuch erstellen, das Schlüssel und Werte abrufen kann:

<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>
Nach dem Login kopieren

Um dieses Zwei-Wege-Wörterbuch zu verwenden, können wir den Code im vorherigen Beispiel ersetzen durch:

<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>
Nach dem Login kopieren

Diese Lösung bietet effektiv eine Möglichkeit, alle Schlüssel abzurufen, die einem angegebenen Wert in einem mehrwertigen Wörterbuch zugeordnet sind.

Das obige ist der detaillierte Inhalt vonWie rufe ich mehrere Schlüssel ab, die einem bestimmten Wert in einem generischen Wörterbuch zugeordnet sind?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage