ホームページ > バックエンド開発 > C++ > 汎用辞書内の特定の値に関連付けられた複数のキーを取得するにはどうすればよいですか?

汎用辞書内の特定の値に関連付けられた複数のキーを取得するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2025-01-21 03:37:10
オリジナル
607 人が閲覧しました

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

汎用辞書内の特定の値に対する複数のキーを取得します

.NET では、汎用辞書内のキーに関連付けられた値を取得するのは非常に簡単です。ただし、特定の値のキーを決定することは、特に複数のキーが同じ値に対応する可能性がある場合には、簡単ではありません。

質問

次のコード スニペットを考えてみましょう:

<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>
ログイン後にコピー

目標は、値「Beta」にマップされるキーを含む配列を取得することです。

解決策

キーと値を取得できるカスタム双方向辞書を作成できます。

<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>
ログイン後にコピー

この双方向辞書を使用するには、前の例のコードを次のように置き換えます。

<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>
ログイン後にコピー

このソリューションは、複数値辞書内の指定された値に関連付けられたすべてのキーを取得する方法を効果的に提供します。

以上が汎用辞書内の特定の値に関連付けられた複数のキーを取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート