문제

나는 Resourcedictionary를 사용하고 있지만 다른 항목과 함께 값이나 키를 찾아 볼 수 있기를 원합니다. 각각은 항상 독특하므로 문제가되지 않습니다. 이 양면 조회 기능이있는 유형이 있습니까?

도움이 되었습니까?

해결책

내장되어 있지 않지만 글을 쓰기가 매우 쉽습니다. 그래도 나는 아마 이것에 대한 Identicary를 구현할 것입니다 ... 그러면 Resourcedictionary를 사용자 정의 유형에 버릴 것입니다.

public class DoubleLookup<TKey, TValue>
{
  private IDictionary<TKey, TValue> keys;
  private IDictionary<TValue, TKey> values;

  //stuff...

  public void Add(TKey key, TValue value)
  {
    this.keys.Add(key, value);
    this.values.Add(value, key);
  }

  public TKey GetKeyFromValue(TValue value)
  {
    return this.values[value];
  }

  public TValue GetValueFromKey(TKey key)
  {
    return this.keys[key];
  }


}

다른 팁

사전에서 키/가치 관계를 되돌릴 때 매우주의하십시오.

사전의 계약은 컬렉션의 모든 값에 대해 해당 값에 매핑되는 하나의 키가 정확히 하나 있음을 보장합니다. 키는 독특합니다. 그러나 그 반대는 사실이 아닙니다. 모든 뚜렷한 값에 대해, 그 값에 대한 많은 다른 키가있을 수 있습니다.

내 자신의 개인 코드 라이브러리 (충분히 가까운 Java로 작성)에는 이런 종류의 멀티 맵 클래스가 있습니다. 키는 고유하지만 각 키는 여러 값과 연관 될 수 있습니다. 맵과 정확히 동일합니다.

컬렉션에서 Key-to Key 조회를 수행 해야하는 경우 다음과 같은 작업을 수행합니다.

Map<K, V> lookupTable = ...;
MultiMap<V, K> reverseLookupTable = MapUtil.invert(lookupTable);

V value = ...;
if (reverseLookupTable.containsKey(value)) {
   Set<K> keys = reverseLookupTable.get(value);
}

리버스 룩업 테이블로 멀티 맵 (해시 맵 또는 사전) 이외의 것을 사용하는 경우 컬렉션의 모든 키와 모든 값을 보장 할 수없는 한 V-> K 매핑의 일부를 잃을 위험이 있습니다. 독특합니다.


편집하다:

죄송합니다. 방금 컬렉션의 모든 키와 값이 독특하다고 말했습니다. 그러나 나는 어쨌든 내 대답을 여기에 남겨두고, 나는 이것을 읽는 다른 사람들을위한 경고로, 동일한 보증을 제공 할 수 없을 수도 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top