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>
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>
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>
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!