Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Mendapatkan Berbilang Kunci yang Dikaitkan dengan Nilai Khusus dalam Kamus Generik?

Bagaimana untuk Mendapatkan Berbilang Kunci yang Dikaitkan dengan Nilai Khusus dalam Kamus Generik?

Mary-Kate Olsen
Mary-Kate Olsenasal
2025-01-21 03:37:10684semak imbas

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

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn