2008-11-18 11 views
6

मैं एक संसाधन डिक्शनरी का उपयोग कर रहा हूं, लेकिन मैं अन्य आइटम के साथ मूल्य या कुंजी को देखने में सक्षम होना चाहता हूं। प्रत्येक हमेशा अद्वितीय होता है, इसलिए यह कोई समस्या नहीं है। क्या कोई ऐसा प्रकार है जिसमें यह डबल पक्षीय लुकअप सुविधा है?डबल पक्षीय संसाधन शब्दकोश के रूप में क्या उपयोग किया जा सकता है?

उत्तर

7

निर्मित नहीं है, लेकिन यह लिखना बहुत आसान है। मैं शायद इसके लिए IDictionary लागू करूँगा ... फिर आप संसाधन डिक्शनरी को अपने कस्टम प्रकार में डंप करेंगे।

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

किसी शब्दकोश में कुंजी/मूल्य संबंधों को उलटते समय बहुत सावधान रहें।

शब्दकोश का अनुबंध गारंटी देता है कि संग्रह में प्रत्येक मूल्य के लिए, बिल्कुल एक कुंजी है जो उस मान के लिए मानचित्र है। चाबियाँ अद्वितीय हैं। लेकिन विपरीत सच नहीं है; प्रत्येक विशिष्ट मूल्य के लिए, उस मान पर कई अलग-अलग कुंजी मैपिंग हो सकती हैं।

मेरी व्यक्तिगत कोड लाइब्रेरी (जावा में लिखा गया है, जो काफी करीब है) में, मेरे पास इस तरह की चीज़ के लिए मल्टीमैप क्लास है। हालांकि चाबियाँ अद्वितीय हैं, प्रत्येक कुंजी कई मानों से जुड़ी हो सकती है। यह एक मानचित्र के समान है>।

जब मैं एक संग्रह में मूल्य-टू-कुंजी लुकअप प्रदर्शन करने की जरूरत है, मैं कुछ इस तरह करते हैं:

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

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

आप अपने रिवर्स के रूप में (एक HashMap या शब्दकोश) की तरह एक मल्टीमैप के अलावा कुछ का उपयोग करते हैं -अपबैक टेबल, आप अपने कुछ वी-> के मैपिंग्स को खोने का जोखिम चलाते हैं, जब तक कि आप गारंटी न दें कि आपके संग्रह में सभी कुंजियां और सभी मान अद्वितीय हैं।


संपादित करें:

उफ़। मैंने अभी देखा है कि आपने कहा है कि आपके संग्रह में सभी कुंजी और मान अद्वितीय हैं। लेकिन मैं इसे किसी भी तरह से यहां जवाब दूंगा, दूसरों को पढ़ने के लिए चेतावनी के रूप में, जो एक ही गारंटी प्रदान करने में सक्षम नहीं हो सकता है।

संबंधित मुद्दे