2009-10-13 15 views
10

फ़्लैश दो दृष्टिकोणों का उपयोग करके एक शब्दकोश (यानी हैश मैप की तरह कुछ) लागू करता है। एक दृष्टिकोण flash.utils.Dictionary वर्ग है, और दूसरा एक सामान्य Object है। मैं यह देखना चाहता हूं कि कितने key:value जोड़े शब्दकोश में हैं। ज्यादातर मामलों में मैं बस यह जानना चाहता हूं कि कोईkey:value जोड़े हैं, यानी, यह जांचें कि यह खाली है या नहीं।एएस 3: जांचें कि कोई शब्दकोश खाली है या नहीं

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

उत्तर

6

एक ही तरीका है कि मन में आता है सभी कुंजियों के माध्यम से पुनरावृति और उन्हें गिनती करने के लिए है - तो की तरह:

var count:int = 0; 

for (var key:Object in dict) 
{ 
    count++; 
} 

सुंदर लंगड़ा - लेकिन मुझे लगता है कि क्या आप के साथ छोड़ दिया जाता है। ध्यान दें कि वेनिला ऑब्जेक्ट के लिए डिक्शनरी वास्तव में वास्तव में वास्तव में पतली आवरण है।

12

यह मज़बूती से आपको पता चलेगा कि एक विशेष शब्दकोश खाली है:

function isEmptyDictionary(dict:Dictionary):Boolean 
{ 
    for each(var obj:Object in dict) 
    { 
     if(obj != null) 
     { 
      return false 
     } 
    } 
    return true; 
} 

ध्यान दें कि आप obj != null जांच करने की जरूरत है - भले ही आप myDictionary[key] = null निर्धारित करते हैं, यह अभी भी एक अशक्त वस्तु के रूप में पुनरावृति जाएगा, ताकि एक नियमित रूप से for...in लूप उस उदाहरण में काम नहीं करेगा। (यदि आप हमेशा delete myDictionary[key] का उपयोग कर रहे हैं तो आपको ठीक होना चाहिए)।

+4

यह खराब प्रथाओं के समाधान की तरह लगता है। शब्दकोश से प्रविष्टि को हटाने से कुंजी और मूल्य दोनों को हटा दिया जाना चाहिए। अगर किसी कारण से, मैं मूल्य को हटाना चाहता हूं लेकिन कुंजी छोड़ना चाहता हूं, तो ताना वास्तव में खाली नहीं है - इसमें कुछ (स्पष्ट रूप से सार्थक) कुंजी हैं। –

+0

पर्याप्त मेला। आप (obj! = नल) बयान को निकाल देते हैं तो यह काम करेंगे, लेकिन मैं अन्य जवाब भी वास्तव में काम करेंगे ... – Reuben

+2

अनुमान लगा रहा हूँ, यह सबसे अच्छा नहीं होगा ऊपर दृष्टिकोण के लिए उपयोग करता है गठबंधन करने के लिए ... इस के साथ में? के लिए ... दृष्टिकोण में आपको बताता है कि क्या आपके पास कोई चाबियाँ हैं, जो महत्वपूर्ण है। यदि आपके पास शून्य मान के साथ कोई कुंजी है तो यह दृष्टिकोण विफल हो सकता है। – scriptocalypse

1

एक और दृष्टिकोण एक शब्दकोश प्रविष्टि dict [ "गिनती"] कि हर बार जब आप शब्दकोश और दोहराता हर बार नीचे आप किसी आइटम को हटाने के लिए एक आइटम जोड़ने अप iterates जोड़ना है। या एक अधिक परिष्कृत समाधान शब्दकोश को उप-वर्गीकृत करेगा और पुश, पॉप और एक लम्बाई संपत्ति जोड़ देगा जो मूल रूप से वही काम करता है।

2

और खाली/नहीं खाली विशेष मामला ओपी ने उल्लेख किया:

var empty:Boolean = true; 

for (var key:Object in dict) 
{ 
    empty = false; 
    break; 
} 

कोड इस तरह जगह यह सब डुप्लिकेट करने के बजाय एक उपयोगिता समारोह में जाना चाहिए ताकि उपयोग के बिंदु पर यह हो जाएगा स्पष्ट क्या हो रहा है।

0

परीक्षण और काम कर रहा है।
नकारात्मक भाषा से परहेज करके स्पष्टता में सुधार हुआ।

/** 
* @return Whether given Dictionary has content or is empty. 
*/ 
public function hasContent(dictionary:Dictionary):Boolean 
{ 
    for (var anything:Object in dictionary) 
     return true; 
    return false; 
} 
संबंधित मुद्दे