일반 사전의 특정 값에 대한 여러 키 가져오기
.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 중국어 웹사이트의 기타 관련 기사를 참조하세요!