2014-06-13 4 views
28

मेरे पास कुछ हज़ार पूर्णांक कुंजी की एक सूची है। इस सूची के साथ मुझे केवल एक चीज करने की ज़रूरत है कि सूची में दिया गया मान है या नहीं।सी # हैशसेट के बराबर जावास्क्रिप्ट क्या है?

सी # के लिए मैं इसे देखने के लिए HashSet का उपयोग करूंगा। जावास्क्रिप्ट समतुल्य क्या है?


मिनिमल समर्थन का स्तर: IE 9+ jQuery (वर्तमान)

+10

आम तौर पर, एक वस्तु। –

+2

संभावित डुप्लिकेट [मैं जावास्क्रिप्ट में एक शब्दकोश या हैशटेबल कैसे कार्यान्वित करूं?] (Http://stackoverflow.com/questions/1208222/how-do-i-implement-a-dictionary-or-hashtable-in-javascript) – Jonn

+0

मैं इस समझौते में हूं कि यह एक डुप्लिकेट है (हालांकि हर कोई एक सेट के रूप में मानचित्र का उपयोग करने पर नहीं उठाता है ..), लेकिन लिंक किए गए प्रश्न में दिए गए उत्तरों में से कई idiosyncrasies और नोट्स नीचे आते हैं। – user2864740

उत्तर

35

हुड के तहत, जावास्क्रिप्ट ऑब्जेक्ट को हैश तालिका के साथ कार्यान्वित किया गया है। तो, अपने Key:Value जोड़ी के रूप में किया जाएगा (your integer):true

एक निरंतर समय देखने समारोह लागू किया जा सकता:

var hash = { 
    1:true, 
    2:true, 
    7:true 
    //etc... 
}; 

var checkValue = function(value){ 
    return hash[value] === true; 
}; 


checkValue(7); // => true 
checkValue(3); // => false 
+1

अच्छा। ध्यान देने के लिए एक और बात हालांकि, यदि आप ** _ (हैश में num) _ ** पुनरावृत्ति करना चाहते हैं, तो num (कुंजी के रूप में संग्रहीत) स्ट्रिंग प्रकार का है। – Rongsir

+0

भी एक (हैश में मान) संपत्ति को केवल शून्य मूल्य के साथ पंजीकृत करने के साथ पर्याप्त होगा - यहां तक ​​कि सही बूलियन मान भी नहीं है और हटाए गए हैश [मूल्य] –

+0

के साथ हटाएं जो केवल स्ट्रिंग कुंजियों के लिए काम करता है – momomo

5

आप अगर उस वस्तु एक निश्चित कुंजी है देखने के लिए सिर्फ एक नियमित रूप से जावास्क्रिप्ट वस्तु और 'में' कीवर्ड का उपयोग कर सकते हैं।

var myObj = { 
    name: true, 
    age: true 
} 

'name' in myObj //returns true; 
'height' in myObj // returns false; 

या आप जानते हैं कि आप के लिए अपने वस्तु में कुंजी है कि जावास्क्रिप्ट वस्तु गुण में बनाया जा सकता है का उपयोग करें ...

var myObj = { 
    name: true, 
    age: true 
} 

myObj.hasOwnProperty('name') //returns true; 
myObj.hasOwnProperty('height') // returns false; 
+0

myObj में 'toString' // सही – Barmar

+0

देता है आप सही हैं। फिक्स्ड। –

+2

और क्या होगा यदि "hasOwnProperty" नामक एक कुंजी है? – dandavis

26

एक वस्तु का प्रयोग जा रहे हैं। , सेट करने के लिए एक कुंजी जोड़ने के लिए कार्य करें: क्या एक कुंजी सेट में है

object[key] = true; 

के परीक्षण के लिए कार्य करें:

if (object.hasOwnProperty(key)) { ... } 

सेट से एक चाबी निकालने के लिए, कार्य करें:

delete object[key] 
+0

'अनसेट'? जेएस में ऑपरेटर 'हटाएं' है! – gsnedders

+0

धन्यवाद, सिंटैक्स को सत्यापित करने के बारे में सिर्फ – Barmar

+2

जांचने का सही तरीका है कि सेट में कोई कुंजी है 'object.hasOwnProperty (key)' का उपयोग करना। अन्यथा, ऑब्जेक्ट == true' में 'toString "। – Bart

1

मैं समाधान पढ़ा है और मैं कुछ करने की कोशिश की। object[key] विधि का उपयोग करने का प्रयास करने के बाद मुझे एहसास हुआ कि यह काम नहीं करेगा। मैं एक हैशसेट चाहता था जो HTML तत्वों को स्टोर कर सके। इन ऑब्जेक्ट्स को जोड़ने पर key को स्ट्रिंग में अनुवादित किया गया था, इसलिए मैं jQuery पर आधारित अपने सेट के साथ आया था। यह add, remove, contains और clear का समर्थन करता है।

var HashSet = function() { 

    var set = []; 

    this.add = function (obj) { 
     if (!this.contains(obj)) { 
      set.push(obj); 
     } 
    }; 

    this.remove = function (obj) { 
     set = jQuery.grep(set, function (value) { 
      return value !== obj; 
     }); 
    }; 

    this.clear = function() { 
     set = []; 
    }; 

    this.contains = function (obj) { 
     return $.inArray(obj, set) > -1; 
    }; 

    this.isEmpty = function() { 
     return set.length === 0; 
    }; 
}; 

नोट
जब सेट करने के लिए $('#myElement') की तरह कुछ जोड़ने, एक असली HTML तत्व $('#myElement')[0] जोड़ना चाहिए। ओह ... और यदि आप बदले गए नियंत्रणों की एक सूची रखना चाहते हैं - तत्व के नाम का उपयोग करें (मुझे :radio नियंत्रणों के साथ एक समस्या दी गई है)।

टिप्पणी 2
मुझे लगता है कि object[key] तेजी से अपने पूर्णांकों के लिए हो सकता है।

Note3
आप केवल संख्या या स्ट्रिंग स्टोर करने के लिए जा रहे हैं, इस सेट तेजी से हो जाएगा:

var HashSet = function() { 

    var set = {}; 

    this.add = function (key) { 
     set[key] = true; 
    }; 

    this.remove = function (key) { 
     delete set[key]; 
    }; 

    this.clear = function() { 
     set = {}; 
    }; 

    this.contains = function (key) { 
     return set.hasOwnProperty(key); 
    }; 

    this.isEmpty = function() { 
     return jQuery.isEmptyObject(set); 
    }; 
}; 
+2

देखने के लिए नीचे कंसोल टैब खोलें यह वास्तव में हैशसेट नहीं है ...यह किसी भी मानदंड को पूरा नहीं करता है कि कोई हैशसेट को –

+0

पर उम्मीद करेगा, इसमें हैशसेट का ओ 1 प्रदर्शन नहीं है, यह सच है। लेकिन यह सी # के हैशसेट कार्यों की नकल करता है। –

+3

नहीं, यह आईसीओलेक्शन इंटरफ़ेस की नकल करता है http://msdn.microsoft.com/en-us/library/92t2ye13%28v=vs.110%29.aspx जो हैशसेट लागू करता है। हैशसेट का बिंदु आम तौर पर ओ (1) लुकअप समय होगा, जबकि आपके द्वारा प्रदान किया जाने वाला पहला कार्यान्वयन ओ (एन) होने के कारण सूची में व्यवहार के समान होता है। –

9

असल में जावास्क्रिप्ट एक Set object उपयोग करने के लिए काफी सरल प्रदान करता है,:

var set = new Set(); 
set.add(1); 
set.add(2); 

set.has(1) // true 

दुर्भाग्यवश, यह IE9 के साथ संगत नहीं है।

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