2012-07-26 10 views
9

Ich versuche, einen Weg zu finden, ein Wörterbuch inline in Actionscript 3, wie zu initialisieren:initialisieren Wörterbuch inline in AS3

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

Ich habe versucht, viele Möglichkeiten, aber keiner funktioniert. Jeder weiß, ob es möglich ist und wie?

Danke

Antwort

8

Nein, Sie können es nicht tun. Sie müssen ein Wörterbuch konstruieren und dann die Werte in einer Schleife oder einzeln hinzufügen.

+0

Sigh tun können, war ich Angst davor, danke – Daniele

0

Wenn es keinen bestimmten Grund gibt, ein Dictionary zu verwenden, können Sie dies mit einem Objekt tun.

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; 
     }   
    } 

Verbrauch::

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

Die Syntax ist nicht korrekt. Ich habe es korrigiert, aber es zeigt sich noch nicht. Wie auch immer, das wird gut funktionieren, wenn die Schlüssel Strings sind, aber nicht für irgendeinen anderen Typ. Angesichts des Beispiels in der Frage sind wahrscheinlich Strings ausreichend. –

+0

Danke, aber nein. Ich benutzte ein einfaches Beispiel, aber in Wirklichkeit brauche ich Schlüssel, die keine Zeichenfolgen sind – Daniele

4

Wenn man wirklich so etwas wollen, können Sie ein Wörterbuch Fabrik verwenden

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

Die DictFactory.create erwartet einen Gegenstand mit Schlüsselwerten, dass Wille Wenn Sie ein anderes Objekt übergeben (in AS3 ist jede Klasse Objekt), können die Ergebnisse unerwünscht sein. :)

+0

Dachte nicht, vielen Dank. Ich brauche eigentlich Objekte als Schlüssel, aber ich kann so etwas schaffen, das es ihnen erlaubt. – Daniele

+0

In meinem Beispiel können Sie beliebige Objekte als Schlüssel oder Werte verwenden –

+0

Au, du hast Recht. Entschuldige, dass ich die letzten Monate mit C# verbracht habe und nun neue Einschränkungen für ActionScript erstelle. Danke noch einmal. – Daniele

2

Sie können die Wörterbuchklasse erweitern und den Standardkonstruktor mit einem überschreiben, der anfängliche Schlüsselwert-Birnen akzeptiert.

EDIT:

Sie auch diese schmutzige JS wie Lösung :) statische

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

Nett, das denkt außerhalb der Box. Verlangsamt es das Zeug oder ist es im Grunde genauso effizient? – Panzercrisis

+0

Sie werden keinen Leistungseinfluss spüren, wenn Sie nicht in sehr vielen Fällen (einige tausend Male pro Rahmen :)) ausführen. Das Problem bei diesem Ansatz besteht darin, dass Sie nur Strings für Schlüssel verwenden können. Das bedeutet, dass Sie keine zusätzliche Funktionalität als von Objekt erhalten. Also ist es besser, einen Wrapper oder eine Factory-Klasse um Dictionary herum zu erstellen. –

6

Wenn es verwenden, können Sie dies mit einem Block

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

Ist das ein Thema unter objektorientierten Sprachen? So etwas habe ich noch nie gesehen, außer in der ersten Zeile. – Panzercrisis