Comunidad de diseño web y desarrollo en internet online

Declarar ArrayCollection asociativo en AS3

Citar            
MensajeEscrito el 30 Abr 2009 10:28 am
Hola, necesito declarar e inicializar un ArrayCollection, pero debe ser asociativo y sus indices ser Strings, los elemetnos dentro del ArrayCollection seran Number inicializados a 0.
Tiene que ser ArrayCollection y no Array para poder hacerlo Bindable y recuperar los elementos mediante getItemat(0).

Es decir debería quedar de esta forma

Código :

A["alojamiento"] =0;
A["deportes"]=0;
A["trabajo"]=0;


Y luego recuperar el contenido con:

Código :

<mx:Label text="{A.getItemAt("alojamiento")}" width="20" x="25"/>


Pero no soy capaz, todo el rato me lanza errores y creo que estoy definendo mal el array.
Alguna ayuda? Gracias.

Por riestra

73 de clabLevel



 

firefox
Citar            
MensajeEscrito el 30 Abr 2009 10:52 am
La diferencia (bueno, no la única, pero hablando mal y pronto) entre un array y un objeto es que el primero tiene indices numéricos, el segundo asociativos. O dicho distinto, si le pones strings como indices a un array ... obtienes objetos. Dicho esto, deberías hacer:

Código ActionScript :

var A:ArrayCollection = new ArrayCollection([{alojamiento:0, deportes:0, trabajo:0}])
trace(A.getItemAt(0).alojamiento)


Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 30 Abr 2009 11:45 am
Pero luego como accedo a los elementos de ese array mediante los indices? Es decir:

Código :

for (var i:Number = 0; i < markers.length(); i++) {   //Markers es un array que contiene elementos que son indices de A
   var tipo:String = marker.@tipo;
   A[tipo]++;
}



Código :

<mx:Label text="{A.['alojamiento']}" width="20" x="25"/>


Como haría eso con el array asociativo declarando en el post anterior?
Gracias.

Por riestra

73 de clabLevel



 

firefox
Citar            
MensajeEscrito el 30 Abr 2009 11:55 am
Mira el trace que te puse

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 30 Abr 2009 12:00 pm
Lo he visto pero no me funciona de esa forma.

A.getItemAt(0).tipo No consigo aumentar los valores de los campos, solamente si lo hago de forma directa con cada campo de la forma:
A.getItemAt(0).alojamiento

Yo necesito hacerlo genérico, que tipo sustituya a cada indice segun su valor.

Por riestra

73 de clabLevel



 

firefox
Citar            
MensajeEscrito el 30 Abr 2009 12:47 pm
Desconozco la estructura que necesitas, pero si necesitas hacer un lookup por índice, usa un objeto con propiedades, luego si necesitas que eso sea un ArrayCollection porque lo tienes que meter como dataprovider (podría ser un array también), ya es solo cuestion de ir afinando el lápiz. Ten en cuenta que una propiedad puede ser tambien un array ... es decir combinando arrays y objetos tienes todo lo que necesitas

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 30 Abr 2009 02:48 pm
Tengo un vector B formado por elementos strings.
Mi vector A es otro vector que almacena las ocurrencias de cada String en B.
De forma que si

Código :

B=["alojamiento","deporte","trabajo","deporte","alojamiento"]


A sería

Código :

A["alojamiento"]=2;
A["deporte"]=2;
A["trabajo"]=1;


Es decir un Array Asociativo con indices cadena o strings.
Pero como luego tengo que pasar el contenido de A al dataprovider

Código :

<mx:Label text="{A.['alojamiento']}" width="20" x="25"/>



Inicialmente y con un Array todo esto era así:

Código :

public var _estadistica:Array = new Array();
    _estadistica['deporte']=0;
    _estadistica['alojamiento']=0;
    _estadistica['trabajo']=0;

for (var i:Number = 0; i < B.length(); i++) {
               var tipo:String = B[i];
               _estadistica[tipo]++;


pero no puedo utilizar un Array, porque me lanza un warning en el dataprovider, tengo que usar un ArrayCollection para poder pasar las ocurrencias de las cadenas al dataprovider con A.getItemAt(). en vez del operador [ ]


Estoy probando la estructura que me has recomendado pero o no vale para lo que quiero o no la estoy usando correctamente.

Por riestra

73 de clabLevel



 

firefox
Citar            
MensajeEscrito el 30 Abr 2009 03:40 pm
estadísticas es un objeto con tres propiedades numéricas que incrementas, mételo en un Array y ese Array en un ArrayCollection para que funcione como dataProvider, lo que hice en mi primer ejemplo. Puedes hardcodearlo y asignarlo como dataprovider para ver como queda, luego ya lo construyes dinámicamente

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.