首頁 > 後端開發 > 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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板