2008-11-18 13 views

Odpowiedz

7

Nie jest wbudowany, ale można go łatwo napisać. Prawdopodobnie jednak zaimplementuję IDictionary w tym przypadku ... Wtedy zrzucisz ResourceDictionary do swojego niestandardowego typu.

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]; 
    } 


} 
2

Zachowaj ostrożność podczas odwracania relacji klucz/wartość w słowniku.

Umowa ze słownikiem gwarantuje, że dla każdej wartości w zbiorze znajduje się dokładnie jeden klucz, który odwzorowuje tę wartość. Klucze są unikalne. Ale odwrotność nie jest prawdą; dla każdej odrębnej wartości może istnieć wiele różnych odwzorowań kluczy na tę wartość.

W mojej własnej bibliotece kodów osobistych (napisanej w Javie, która jest wystarczająco blisko), mam klasę MultiMap dla tego rodzaju rzeczy. Chociaż klucze są unikalne, każdy klucz może być powiązany z wieloma wartościami. Jest dokładnie taki sam jak mapa>.

Kiedy trzeba wykonać wartość produktów na kluczowych wyszukiwań w kolekcji, zrobić coś takiego:

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

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

Jeśli używasz czegoś innego niż Multimap (jak HashMap lub słownika) jako swojej odwrocie -strona przeglądowa, ryzykujesz utratą niektórych mapowań V-> K, chyba że możesz zagwarantować, że wszystkie klucze I wszystkie wartości w twojej kolekcji są unikatowe.


EDIT:

Ups. Właśnie zauważyłem, że powiedziałeś, że wszystkie klucze i wartości w twojej kolekcji są unikalne. Ale i tak zostawię tutaj swoją odpowiedź, jako ostrzeżenie dla innych czytających to, którzy mogą nie być w stanie zapewnić tej samej gwarancji.

Powiązane problemy