Dapatkan berbilang kunci untuk nilai tertentu dalam kamus generik
Dalam .NET, mendapatkan semula nilai yang dikaitkan dengan kunci dalam kamus generik adalah sangat mudah. Walau bagaimanapun, menentukan kunci nilai yang diberikan bukanlah mudah, terutamanya apabila berbilang kunci mungkin sepadan dengan nilai yang sama.
Soalan
Pertimbangkan coretan kod berikut:
<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>
Matlamatnya adalah untuk mendapatkan tatasusunan yang mengandungi kunci yang memetakan nilai "Beta".
Penyelesaian
Kami boleh mencipta kamus dua hala tersuai yang mampu mendapatkan kunci dan nilai:
<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>
Untuk menggunakan kamus dua hala ini, kita boleh menggantikan kod dalam contoh sebelumnya dengan:
<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>
Penyelesaian ini menyediakan cara untuk mendapatkan semula semua kunci yang dikaitkan dengan nilai tertentu dalam kamus berbilang nilai.
Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Berbilang Kunci yang Dikaitkan dengan Nilai Khusus dalam Kamus Generik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!