AS3

2012-07-26 9 views
9

में प्रारंभ शब्दकोश इनलाइन मैं, ActionScript 3 में एक शब्दकोश इनलाइन प्रारंभ करने के लिए एक रास्ता खोजने की कोशिश कर रहा हूँ की तरह:AS3

private var sampleDic:Dictionary = new Dictionary (
    { "zero", "Hello" }, 
    { "one", "World" } 
); 

मैं कई मायनों करने की कोशिश की, लेकिन कोई भी काम करता है। कोई भी जानता है कि यह संभव है, और कैसे?

धन्यवाद

उत्तर

8

नहीं, आप इसे नहीं कर सकते हैं। आपको एक शब्दकोश बनाना होगा और फिर मानों को लूप या व्यक्तिगत रूप से जोड़ना होगा।

+0

साई साथ ऐसा कर सकते उपयोग कर सकते हैं, मैं था उस से डर, धन्यवाद – Daniele

0

यदि किसी शब्दकोश का उपयोग करने के लिए कोई विशिष्ट कारण नहीं है तो आप इसे किसी ऑब्जेक्ट के साथ कर सकते हैं।

public class DictFactory 
    { 
     public var dict:Dictionary; 
     public function create(obj:Object):Dictionary 
     { 
      dict = new Dictionary(); 

      for (var key:String in obj) { 
       dict[key] = obj[key]; 
      } 

      return dict; 
     }   
    } 

उपयोग::

private var sampleDic:Dictionary = new DictFactory().create({ "zero":"Hello", "one": "World" }); 

DictFactory.create मुख्य मान के साथ एक वस्तु की उम्मीद है, कि इच्छा

private var sample:Object = { 
    "zero": "Hello", 
    "one": "World" 
}; 
+1

वाक्यविन्यास सही नहीं है। मैंने इसे सही किया है लेकिन यह अभी तक प्रदर्शित नहीं होता है। वैसे भी, यह ठीक काम करेगा जब चाबियाँ तार होंगी, लेकिन किसी अन्य प्रकार के लिए नहीं। प्रश्न में उदाहरण को देखते हुए, शायद तार पर्याप्त हैं। –

+0

धन्यवाद लेकिन नहीं। मैंने एक साधारण उदाहरण का उपयोग किया, लेकिन हकीकत में मुझे उन चाबियों की आवश्यकता है जो तार नहीं हैं – Daniele

4

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

+0

उस बारे में नहीं सोचा था, बहुत बहुत धन्यवाद। मुझे वास्तव में कुंजी के रूप में वस्तुओं की आवश्यकता है, लेकिन मैं ऐसा कुछ प्रबंधित कर सकता हूं जो उन्हें अनुमति देगा। – Daniele

+0

मेरे उदाहरण में आप किसी ऑब्जेक्ट का उपयोग कुंजी या मान –

+0

ओउ के रूप में कर सकते हैं, आप सही हैं। क्षमा करें मैंने पिछले महीनों में सी # का उपयोग करके बिताया और अब मेरा दिमाग एक्शनस्क्रिप्ट के लिए नई गैर-मौजूदा सीमाओं को तैयार कर रहा है। एक बार फिर धन्यवाद। – Daniele

2

आप डिक्शनरी क्लास का विस्तार कर सकते हैं और डिफ़ॉल्ट कन्स्ट्रक्टर को ओवरराइड कर सकते हैं जो प्रारंभिक कुंजी-मूल्य नाशपाती स्वीकार करता है।

संपादित करें:

तुम भी समाधान :)

import flash.utils.Dictionary; 

var dict : Dictionary = function (d : Dictionary, p : Object) : Dictionary { for (var i : String in p) { d[i] = p[i] }; return d; }(new Dictionary(), { 
    "zero": "Hello", 
    "one": "World" 
}) 

trace(dict["zero"]); 
+0

अच्छा, यह बॉक्स के बाहर सोच रहा है। क्या यह सामान को धीमा या कुछ भी धीमा करता है, या यह मूल रूप से उतना ही कुशल है? – Panzercrisis

+0

यदि आप बहुत ही कम समय में निष्पादित नहीं करते हैं तो आपको प्रदर्शन प्रभाव महसूस नहीं होगा (प्रति फ्रेम कुछ हज़ार बार :))। इस दृष्टिकोण के साथ समस्या यह है कि आप केवल चाबियों के लिए स्ट्रिंग का उपयोग कर सकते हैं। इसका मतलब है कि आपको ऑब्जेक्ट से अतिरिक्त कार्यक्षमता नहीं मिलती है। तो शब्दकोश के चारों ओर कुछ रैपर या फैक्ट्री क्लास बनाने के लिए एक बेहतर बात है। –

6

की तरह इस गंदे जे एस यदि यह स्थिर है आप एक ब्लॉक

private static var myDict:Dictionary = new Dictionary(); 
{ 
    myDict["zero"] = "Hello"; 
    myDict["one"] = "World"; 
} 
+1

क्या इस तरह की चीज ऑब्जेक्ट उन्मुख भाषाओं के बीच एक आम विषय है? पहली पंक्ति को छोड़कर मैंने कभी ऐसा कुछ नहीं देखा है। – Panzercrisis