Ordenar elementos de un Vector en Actionscript 3
En este ejemplo explicaré como ordenar elementos internos de un objeto de clase Vector en Actionscript 3. Para ordenar los elementos en realidad se realiza de igual manera que en un Array. Únicamente deberemos escribir una función que compare lo elementos según el orden que nos interese.
El valor que nos ha de devolver la función que realiza la comparación deberá ser:
- 1: Si el primer valor es superior al segundo
- -1: si el primer valor es inferior al segundo
- 0: Si los valores son iguales
De manera que si creamos un Vector con 10 numero aleatorios:
- var vector:Vector.<uint> = new Vector.<uint>();
- for (var i:int = 0; i < 10; i++)
- {
- vector.push(Math.random() * 100);
- }
- trace(vector); //25,19,69,95,57,78,59,86,2,97
- [/as]
- Si ahora lo quisiésemos ordenar de forma ascendente haríamos lo siguiente:
- [as]function ascendente(x:uint, y:uint):int
- {
- return (x >= y)?1 :-1;
- }
- vector.sort(ascendente);
- trace(vector); //2,19,25,57,59,69,78,86,95,97
Y lo mismo para ordenarlo de forma descendente:
function descendente(x:uint, y:uint):int
{
return (x < y)?1 :-1;
}
vector.sort(descendente);
trace(vector); //97,95,86,78,69,59,57,25,19,2
[/as]
Compártelo:
Visto 14.216 veces
En que momento pasó los parámetro x e y al llamar a la función?, explicar por favor
@alex:
Esos parámetros no se los has de pasar en ningún momento. Son parámetros que se pasan por defecto al llamar la función.
Tu únicamente has de colocar el nombre de la función dentro del método sort();
vector.sort(ascendente);
La función sort() genera un bucle en el que compara automáticamente todos los elementos del array de dos en dos. Osea X=elemento 1, Y=elemento 2.
Lo que has de hacer es colocar en esa función la formula con la que decidas que un elemento ha de estar por delante del otro. En este caso, como el array son numeros se coloca antes el que es mayor:
return (x>= y)?1 :-1;
Dependiendo del resultado del return (1, o -1) colocará el elemento 1 delante o detrás del elemento 2. Y así sucesivamente.