汎用辞書から指定した値を持つ複数のキーを取得する方法
.NET 汎用辞書は、次のコードに示すように、キーに関連付けられた値を取得する効率的な方法を提供します。
<code class="language-csharp">Dictionary<int, string> greek = new Dictionary<int, string>(); greek.Add(1, "Alpha"); greek.Add(2, "Beta"); string secondGreek = greek[2]; // Beta</code>ただし、汎用辞書には一意のキーごとに 1 つのキーと値のペアしか格納されないため、指定された値に関連付けられたキーを取得することは汎用辞書ほど簡単ではありません。これにより、特定の値に対応するすべてのキーを検索する必要がある場合、特に複数のキーが同じ値にマップされる可能性がある場合に問題が発生する可能性があります。
この問題を解決するために、次のコードはキーと値を一般的な方法で取得できる双方向辞書を実装します。
<code class="language-csharp">using System; using System.Collections.Generic; using System.Text; class BiDictionary<TFirst, TSecond> { IDictionary<TFirst, IList<TSecond>> firstToSecond = new Dictionary<TFirst, IList<TSecond>>(); IDictionary<TSecond, IList<TFirst>> secondToFirst = new Dictionary<TSecond, IList<TFirst>>(); // ... (方法和属性的实现) ... }</code>この双方向辞書は、2 セットのキーと値のマッピングを保持します。1 つは最初のキーから 2 番目の値へのリストで、もう 1 つは 2 番目の値から最初のキーへのリストです。これにより、キーと値の効率的な双方向の取得が可能になります。
たとえば、各ギリシャ文字に数値が割り当てられているギリシャ語単語の辞書を考えてみましょう。双方向辞書を使用すると、次のように、指定された数値に対応するギリシャ文字を簡単に取得できます。
このメソッドは、指定された値に対応するキーのリストを返すことにより、重複した値をエレガントに処理します。これは、複数のキーが同じ値にマップされる可能性のある辞書を扱う場合の双方向辞書の多用途性を示しています。
<code class="language-csharp">BiDictionary<int, string> greek = new BiDictionary<int, string>(); greek.Add(1, "Alpha"); greek.Add(2, "Beta"); greek.Add(5, "Beta"); // 检索对应于值“Beta”的希腊字母 IList<int> betaKeys = greek.GetBySecond("Beta"); // 显示结果 Console.WriteLine("Keys for \"Beta\":"); foreach (int key in betaKeys) { Console.WriteLine(key); }</code>
以上が辞書内の同じ値に関連付けられた複数のキーを効率的に取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。