¿Qué es una buena manera de combinar dos matrices ordenadas en ActionScript (específicamente ActionScript 3.0)? La matriz resultante debe ser ordenada y sin duplicados.Combinar dos matrices de manera limpia en ActionScript (3.0)?
Respuesta
Para fusionar (concatenar) matrices, use .concat()
.
A continuación hay dos ejemplos de cómo puede concatenar matrices y eliminar duplicados al mismo tiempo.
manera más conveniente: (puede usar ArrayUtil.createUniqueCopy()
de as3corelib)
// from as3corelib:
import com.adobe.utils.ArrayUtil;
var a1:Array = ["a", "b", "c"];
var a2:Array = ["c", "b", "x", "y"];
var c:Array = ArrayUtil.createUniqueCopy(a1.concat(a2)); // result: ["a", "b", "c", "x", "y"]
manera un poco más rápido: (se puede recorrer las matrices de sí mismo y utilizar Array.indexOf()
para comprobar si hay duplicados)
var a1:Array = ["a", "b", "c"];
var a2:Array = ["c", "b", "x", "y"];
var a3:Array = ["a", "x", "x", "y", "z"];
var c:Array = arrConcatUnique(a1, a2, a3); // result: ["a", "b", "c", "x", "y", "z"]
private function arrConcatUnique(...args):Array
{
var retArr:Array = new Array();
for each (var arg:* in args)
{
if (arg is Array)
{
for each (var value:* in arg)
{
if (retArr.indexOf(value) == -1)
retArr.push(value);
}
}
}
return retArr;
}
Este es un tipo de algoritmo simple para escribir. Me sorprendería si hubiera una manera más directa de hacer esto en Actionscript.
function merge(a1:Array, a2:Array):Array {
var result:Array = [];
var i1:int = 0, i2:int = 0;
while (i1 < a1.length && i2 < a2.length) {
if (a1[i1] < a2[i2]) {
result.push(a1[i1]);
i1++;
} else if (a2[i2] < a1[i1]) {
result.push(a2[i2]);
i2++;
} else {
result.push(a1[i1]);
i1++;
i2++;
}
}
while (i1 < a1.length) result.push(a1[i1++]);
while (i2 < a2.length) result.push(a2[i2++]);
return result;
}
function remDuplicates(_array:Array):void{
for (var i:int = 0; i < _array.length;++i) {
var index:int = _array.indexOf(_array[i]);
if (index != -1 && index != i) {
_array.splice(i--, 1);
}
}
}
Luego de la "fusión" concat uso. Ejemplo:
var testArray:Array = [1, 1, 1, 5, 4, 5, 5, 4, 7, 2, 3, 3, 6, 5, 8, 5, 4, 2, 4, 5, 1, 2, 3, 65, 5, 5, 5, 5, 8, 4, 7];
var testArray2:Array = [1, 1, 1, 5, 4, 5, 5, 4, 7, 2, 3, 3, 6, 5, 8, 5, 4, 2, 4, 5, 1, 2, 3, 65, 5, 5, 5, 5, 8, 4, 7];
testArray.concat(testArray2);
trace(testArray);
remDuplicates(testArray);
trace(testArray);
Uso Array.indexOf para detectar duplicados va a ser muy lento si usted tiene una lista que contiene un gran número de elementos; una forma mucho más rápida de eliminar duplicados sería arrojar los contenidos de la matriz en un Set después de concatenarlos.
// Combine the two Arrays.
const combined : Array = a.concat(b);
// Convert them to a Set; this will knock out all duplicates.
const set : Object = {}; // use a Dictionary if combined contains complex types.
const len : uint = combined.length;
for (var i : uint = 0; i < len; i++) {
set[combined[i]] = true;
}
// Extract all values from the Set to produce the final result.
const result : Array = [];
for (var prop : * in set) {
result.push[prop];
}
Si el programa hace un uso intensivo de Colecciones entonces, si puede ser prudente hacer uso de una de las muchas colecciones de AS3 marcos por ahí que proporcionan una interfaz sencilla para la manipulación de datos y siempre tendrá el enfoque óptimo cuando se viene a la implementación.
Muy limpio, gracias. Error en 'result.push [prop]' tho. Debería ser 'result.push (prop)' – chichilatte
Por favor, siga el paso siguiente para obtener su respuesta:
- de concatenación de dos matriz utilizando "de concatenación" Methos.
- New Array (concated) especie utilizando el método de "Ordenar", que proporciona como API en clase Array usuario
- Hacer una función definida para eliminar duplicados (véase más adelante funciones)
- > RemoveDuplicates función (p_arr: Array): Array {
var ansArr:Array = new Array(); var len:uint = p_arr.length; var i:uint = 0; var j:uint = 0; ansArr[j] = p_arr[i]; i++; j++; while(i<len) { if(ansArr[j] != p_arr[i]) { ansArr[j] = p_arr[i]; j++; } i++; } return ansArr;
}
devuelto "ansArr", serán ordenados y sin array resultante duplicado de dos matriz.
- 1. Combinar dos matrices en JavaScript
- 2. combinar dos matrices
- 3. Combinar dos matrices de enteros
- 4. Combinar dos matrices en Hash
- 5. forma más limpia de combinar dos cortos a un int
- 6. ¿Cuál es la forma más limpia de simular pass-by-reference en Actionscript 3.0?
- 7. Actionscript 3.0: Ámbito
- 8. ActionScript 3.0 try..catch
- 9. ¿Manera limpia de combinar varios tarros? Preferiblemente usando Ant
- 10. ActionScript 3.0 + ¿Calcula el intervalo de tiempo entre dos fechas?
- 11. Manera elegante de combinar asimétricamente 2 matrices en PHP
- 12. Combinar dos matrices en una matriz en python y ordenar
- 13. Combinar dos matrices como pares clave de valor en PHP
- 14. PHP: Combinar matrices multidimensionales
- 15. Actionscript 3.0 Cadena con formato?
- 16. ¿Cómo combinar dos BST de manera eficiente?
- 17. La mejor manera de combinar dos matrices de clases según el valor de variable de clase
- 18. Establecer texto delineando/borde en Actionscript 3.0
- 19. MovieClip vs Sprite en Actionscript 3.0
- 20. Ordenar dos matrices de la misma manera
- 21. ¿Cuál es la diferencia entre ActionScript 2.0 y ActionScript 3.0
- 22. ¿Cómo puedo combinar matrices PHP?
- 23. cómo combinar dos matrices sumando los valores fusionados
- 24. combinar dos listas de manera única en Python
- 25. ¿Manera limpia de detectar todos los errores arrojados en una aplicación MVC 3.0?
- 26. Falta de sobrecarga del operador en ActionScript 3.0
- 27. Encontrar el tamaño de imagen cargado en AS3 (ActionScript 3.0)
- 28. ¿Cómo puedo encontrar la longitud de una matriz asociativa en ActionScript 3.0?
- 29. Constante de número de línea en Actionscript 3.0?
- 30. ActionScript: cómo asignar matrices por VALOR en lugar de REFERENCIA?
Pidió una "buena" manera ...:) – Luke
Ok, tal vez la otra forma en que agregué la respuesta podría considerarse 'mejor' – hasseg
Gracias, funcionó a las mil maravillas. –