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
Lepaskan: 2025-01-21 03:37:10
asal
607 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan