2017-02-13 7 views
17

मैं टाइपस्क्रिप्ट का उपयोग करने के लिए नया हूं और मैं एक हैशप/शब्दकोश इंटरफ़ेस को लागू करने की कोशिश कर रहा हूं। अब तक मेरे पासटाइपस्क्रिप्ट हैशप/शब्दकोश इंटरफ़ेस

export interface IHash { 
    [details: string] : string; 
} 

मुझे यह समझने में कुछ परेशानी हो रही है कि वास्तव में यह वाक्यविन्यास क्या है। अगर मैं var x : IHash = {}; करना चाहता हूं तो मैं डेटा जोड़ने/एक्सेस करने के बारे में कैसे जाऊं?

उत्तर

32

बस एक सामान्य js वस्तु के रूप में:

let myhash: IHash = {}; 

myhash["somestring"] = "value"; //set 

let value = myhash["somestring"]; //get 

वहाँ आप [indexer: string] : string

  • बताई टाइपप्रति साथ क्या कर रहे दो बातें वस्तु किसी भी स्ट्रिंग आधारित कुंजी
  • हो सकता है हैं कि एक कुंजी का मान, जब तक कि स्पष्ट रूप से टाइप नहीं किया जाता है, स्ट्रिंग मान होना चाहिए।

    let map = new Map<string, string>(); 
    
    map.set("key", "value"); 
    map.get("key"); // value 
    

    यह आपको कुंजी के रूप में किसी भी वस्तु (न सिर्फ संख्या/स्ट्रिंग) है की अनुमति देता है:

enter image description here

एक विकल्प के रूप में, वहाँ एक Map वर्ग है।

हालांकि इसकी अपेक्षाकृत नई है, इसलिए यदि आप पुराने सिस्टम को लक्षित करते हैं तो आपको इसे पॉलीफिल करना पड़ सकता है।

2
var x : IHash = {}; 
x['key1'] = 'value1'; 
x['key2'] = 'value2'; 

console.log(x['key1']); 
// outputs value1 

console.log(x['key2']); 
// outputs value2 

यदि आप अपने शब्दकोश के माध्यम से फिर से शुरू करना चाहते हैं, तो आप इसका उपयोग कर सकते हैं।

Object.keys(x).forEach((key) => {console.log(x[key])}); 

Object.keys एक वस्तु के सभी गुण देता है, तो यह वस्तुओं शब्दकोश स्टाइल से सभी मूल्यों लौटने के लिए अच्छी तरह से काम करता है।

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

आप इसे कुंजी और उसके मान के समान मूल्य निर्दिष्ट करके हैशसेट की तरह उपयोग कर सकते हैं।

यदि आप चाबियाँ अद्वितीय और संभावित रूप से अलग-अलग मानों के साथ चाहते थे, तो आपको बस यह जांचना होगा कि इसमें जोड़ने से पहले वस्तु पर कुंजी मौजूद है या नहीं।

var valueToAdd = 'one'; 
if(!x[valueToAdd]) 
    x[valueToAdd] = valueToAdd; 

या आप अपनी खुद की कक्षा को एक प्रकार की हैशसेट के रूप में कार्य करने के लिए बना सकते हैं।

Class HashSet{ 
    private var keys: IHash = {}; 
    private var values: string[] = []; 

    public Add(key: string){ 
    if(!keys[key]){ 
     values.push(key); 
     keys[key] = key; 
    } 
    } 

    public GetValues(){ 
    // slicing the array will return it by value so users cannot accidentally 
    // start playing around with your array 
    return values.slice(); 
    } 
} 
+1

स्टैक ओवरफ़्लो पर यह अच्छा अभ्यास है कि आपके समाधान को क्यों काम करना चाहिए, इस बारे में स्पष्टीकरण जोड़ें। अधिक जानकारी के लिए [कैसे जवाब दें] (// stackoverflow.com/help/how-to-answer) पढ़ें। –

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