2012-07-26 8 views
9

Sto cercando di trovare un modo per inizializzare una linea Dizionario in ActionScript 3, come:Inizializza Dizionario inline in AS3

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

Ho provato molti modi, ma nessuno funziona. Qualcuno sa se è possibile, e come?

Grazie

risposta

8

No, non puoi farlo. Devi costruire un dizionario e quindi aggiungere i valori in un ciclo o individualmente.

+0

Sigh, ero paura di ciò, grazie – Daniele

0

Se non esiste un motivo specifico per utilizzare un dizionario, è possibile farlo con un oggetto.

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

La sintassi non è corretta. L'ho corretto ma non viene ancora visualizzato. Ad ogni modo, funzionerà correttamente quando le chiavi sono stringhe, ma non per altri tipi. Dato l'esempio nella domanda, probabilmente le stringhe sono sufficienti. –

+0

Grazie ma no. Ho usato un semplice esempio, ma in realtà ho bisogno di chiavi che non siano stringhe – Daniele

4

se si vuole veramente una cosa del genere, è possibile utilizzare una fabbrica Dizionario:

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

Usage:

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

Il DictFactory.create prevede un oggetto con i valori-chiave, che la volontà essere applicato al dizionario restituito, se si passa qualsiasi altro oggetto (in AS3, qualsiasi classe è Object), i risultati potrebbero non essere desiderabili. :)

+0

Non ci ho pensato, grazie mille. In realtà ho bisogno di oggetti come chiavi, ma posso gestire qualcosa del genere che consentirà loro. – Daniele

+0

Nel mio esempio è possibile utilizzare qualsiasi oggetto come chiave o valori –

+0

Ow, hai ragione. Scusa se ho passato gli ultimi mesi con C# e ora la mia mente sta creando nuove limitazioni non esistenti per ActionScript. Grazie ancora. – Daniele

2

È possibile estendere la classe dizionario e sovrascrivere il costruttore predefinito con uno che accetta le pere valore-chiave iniziali.

EDIT:

È anche possibile utilizzare questo JS sporco come soluzione :)

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

Bello, sta pensando fuori dagli schemi. Rallenta le cose o comunque qualcosa, o è fondamentalmente altrettanto efficiente? – Panzercrisis

+0

Non sentirai l'impatto sulle prestazioni se non esegui molto in dettaglio (alcune migliaia di volte per frame :)). Il problema con questo approccio è che puoi usare solo stringhe per le chiavi. Ciò significa che non ottieni funzionalità extra rispetto a Object. Quindi, una cosa migliore è creare un wrapper o una classe factory in giro Dizionario. –

6

Se è statico si può fare questo con un blocco

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

Questo tipo di cosa è un tema comune tra i linguaggi orientati agli oggetti? Non ho mai visto nulla di simile, tranne la prima riga. – Panzercrisis