java इस - जावा स्क्रिप्ट में जावा सेट की तरह कोई डेटा संरचना है?




3 Answers

मैंने एक जावास्क्रिप्ट हैशसेट कार्यान्वयन लिखा है जो आप चाहते हैं और किसी ऑब्जेक्ट को सेट के सदस्य होने की अनुमति देता है: http://code.google.com/p/jshashtable

हालांकि, अगर आपको बस तारों को स्टोर करने की आवश्यकता है, तो आप सेट ऑब्जेक्ट के सामान्य नाम के गुणों के रूप में सेट सदस्यों को स्टोर करके कुछ और कर सकते हैं। उदाहरण के लिए:

function StringSet() {
    var setObj = {}, val = {};

    this.add = function(str) {
        setObj[str] = val;
    };

    this.contains = function(str) {
        return setObj[str] === val;
    };

    this.remove = function(str) {
        delete setObj[str];
    };

    this.values = function() {
        var values = [];
        for (var i in setObj) {
            if (setObj[i] === val) {
                values.push(i);
            }
        }
        return values;
    };
}

कार्यान्वयन के बारे में एक नोट: val एक वस्तु है जिसे StringSet कार्यान्वयन द्वारा आंतरिक रूप से प्रत्येक सेट के लिए अद्वितीय है। ऑब्जेक्ट के गुण मूल्यों की तुलना करते हुए संपत्ति के गुणों को val विरुद्ध सेट (सेट setObj ) setObj जो hasOwnProperty() की आवश्यकता को समाप्त करता है और गारंटी देता है कि सेट में जोड़े गए तार केवल values में दिखाई देंगे

उदाहरण उपयोग:

var set = new StringSet();
set.add("foo");
set.add("bar");

alert(set.contains("foo")); // true
alert(set.contains("baz")); // false

set.values(); // ["foo", "bar"], though not necessarily in that order
set.remove("foo");
set.values(); // ["bar"]
व्हाट प्रेरित

इस सवाल का पहले से ही उत्तर दिया गया है:

मैं जावास्क्रिप्ट में एक डेटा संरचना का उपयोग करना चाहता हूं जिसका इस्तेमाल आईडी की संख्या को स्टोर करने के लिए किया जा सकता है। मुझे यह जांचने में सक्षम होना चाहिए कि क्या एक कुंजी पहले से ही उस सेट में मौजूद है, कुछ जावा सेट्स की तरह

मैं निम्न व्यवहारों को प्राप्त करना चाहता हूं (यह कोड जावा में है):

Set<String> st = new HashSet<String>();
//add elemets

if(st.contains("aks") ){
  //do something
}

मैं एक जावास्क्रिप्ट / डोजो को इसके बाद के संस्करण के बराबर चाहता हूं।




कोई डोजो की आवश्यकता नहीं है, यह जावास्क्रिप्ट का मूल है वस्तुओं का उपयोग करें आपके जैसा लगता है कि केवल चाबियाँ, मूल्यों की ज़रूरत नहीं है लुकअप लगातार समय है

var st = {'aks':1, 'foo':1, 'bar':1};  // or could start with empty {}. 1 could be any value of any type, it's just short.

//add elements
st.baz = 1;

//or load up dynamically

myArrayOfStrings.forEach(function(key){
 st[key] = 1;
});


if("aks" in st){
  //do something
}



हैश सेट को लागू करने के लिए अच्छा उम्मीदवार है आप ऐसा फ़ंक्शन का उपयोग करके एक सेट बना सकते हैं:

function set () {
    var result = {};
    for (var i = 0; i < arguments.length; i++) result[arguments[i]] = true;
    return result;
}

उदाहरण के लिए:

x = set([1,2,2,4])
x[1] #==> true
x[3] #==> false
x[5] = true; # add element to the set
x[5] = false; # remove element from the set



Related

java javascript dojo set