2009-04-01 28 views
7

में शब्दकोश की लंबाई की गणना करना फ्लेक्स में किसी शब्दकोश ऑब्जेक्ट की लंबाई की गणना करने का सबसे अच्छा तरीका क्या है?फ्लेक्स

var d:Dictionary = new Dictionary(); 
d["a"] = "alpha"; 
d["b"] = "beta"; 

मैं इस शब्दकोश के लिए 2 होना चाहिए लंबाई की जांच करना चाहता हूं। क्या वस्तुओं के माध्यम से लूपिंग के अलावा इसे करने का कोई तरीका है?

उत्तर

12

नहीं, तत्वों के माध्यम से लूपिंग के अलावा किसी ऑब्जेक्ट की लंबाई (शब्दकोश बहुत अधिक ऑब्जेक्ट है जो गैर-स्ट्रिंग कुंजी का समर्थन करता है) की जांच करने का कोई तरीका नहीं है।

http://www.flexer.info/2008/07/31/how-to-find-an-objects-length/

आप शायद पता चल सके कि संपत्ति एक आंतरिक एक है के बारे में चिंता करने की जरूरत नहीं है।

+5

यहाँ किसी और notbody यह प्रदान की के रूप में पाश करने के लिए कोड है: '[ \t सार्वजनिक स्थिर समारोह getLen (घ: शब्दकोश): int { \t \t v ar i: int = 0; (var कुंजी: ऑब्जेक्ट में डी) { i ++; } वापसी मैं; } ] –

1

आप associative arrays का उपयोग कर सकते हैं क्योंकि मुझे नहीं लगता कि एक शब्दकोश वस्तु की लंबाई जांचना संभव है। हालांकि आप शब्दकोश वर्ग का विस्तार कर सकते हैं और उस कार्यक्षमता को जोड़ सकते हैं और संबंधित विधियों को ओवरराइड कर सकते हैं।

वैकल्पिक रूप से, आप लंबाई को प्राप्त करने के लिए हर बार इसे लूप कर सकते हैं जो वास्तव में एक अच्छा विचार नहीं है लेकिन उपलब्ध है।

var d:Dictionary = new Dictionary(); 
d["hi"] = "you" 
d["a"] = "b" 
for (var obj:Object in d) { 
    trace(obj); 
} 
// Prints "hi" and "a" 

तुम भी "setPropertyIsEnumerable" का उपयोग कर के बारे में जानकारी के लिए here देख सकते हैं, लेकिन मुझे विश्वास है कि तुलना में यह शब्दकोश के लिए है वस्तुओं के लिए अधिक उपयोगी है।

0

आप एक डिक्शनरी के आस-पास एक कक्षा लिख ​​सकते हैं जो सम्मिलन/निष्कासन को नियंत्रित करता है ताकि आप कुंजी गणना का ट्रैक रख सकें।

प्रॉक्सी को विस्तारित करने का प्रयास करें या केवल एक रैपर करें।

3

as3corelib में एक उपयोग फ़ंक्शन है जो शब्दकोश में कुंजी प्राप्त कर सकता है। आप DicitonaryUtil

की जांच कर सकते विधि है:

public static function getKeys(d:Dictionary):Array 
    { 
     var a:Array = new Array(); 

     for (var key:Object in d) 
     { 
      a.push(key); 
     } 

     return a; 
    } 

तो तुम .length

+4

यह वास्तव में एक सरणी बनाता है और प्रत्येक तत्व को इसमें जोड़ता है, इसलिए यह बहुत महंगा है (स्मृति और समय में) –

0

getKeys (शब्दकोश) करना होगा यह अब पर ठोकर DictionaryUtil के लिए एक अद्यतन नहीं है किसी को भी लिए। अब आप सिर्फ कॉल कर सकते हैं ..

var count:int = DictionaryUtil.getKeyCount(myDictionary); 
+0

क्या आपके पास यह उपलब्ध होने पर या दस्तावेज़ीकरण के लिंक के बारे में जानकारी है?इसके बारे में वहां ज्यादा जानकारी नहीं है। – calvinf

+0

नहीं, मैं नहीं करता हूं। मुझे पता है कि यह फ्लेक्स 3.5 और 4 में संभवतः 3 तक भी उपलब्ध है। मैं सिर्फ इस उत्तर की तलाश कर रहा था और यहां किसी भी शब्द का उल्लेख किया गया था, इसलिए मैंने इसमें उपलब्ध कार्यों पर स्वतः पूर्ण किया और इस पर ठोकर खाई। – Craig

+0

मैं फ्लेक्स 4 का उपयोग कर रहा हूं और यह एपीआई नहीं प्राप्त कर सकता। लेकिन Flit लाइब्रेरी में DictionaryUtil.getItemCount है। http://code.google.com/p/flit/source/browse/trunk/flit/src/obecto/utility/DictionaryUtil.as?r=154 – Rudy

0

आप Dictionary की keys प्राप्त कर सकते हैं और नीचे के रूप में keys की lengtharray की जाँच करें: