> 백엔드 개발 > 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>
로그인 후 복사

목표는 "베타" 값에 매핑되는 키가 포함된 배열을 얻는 것입니다.

솔루션

키와 값을 검색할 수 있는 사용자 정의 양방향 사전을 만들 수 있습니다.

<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으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿