Comunidad de diseño web y desarrollo en internet online

Pasar un array a una función por valor

Citar            
MensajeEscrito el 11 Nov 2007 04:11 pm
Hola, me preguntaba si existe alguna manera eficiente de pasar un array a una función mediante 'paso por valor'. Hasta ahora la única manera con la que he podido hacerlo es haciendo una copia del array elemento a elemento, no siendo muy recomendable para arrays muy grandes.

Gracias.

Por RedSkull

1 de clabLevel



 

firefox
Citar            
MensajeEscrito el 11 Nov 2007 08:32 pm
¿Puedes ser un poco más explícito? ¿Por qué tiene que ser "elemento a elemento"? Podrías pasar el array completo a la función "por referencia" y trabajarlo así.

Por The Fricky!

Presidente

6168 de clabLevel

3 tutoriales
8 articulos

Genero:Masculino   Bastard Operators From Hell Héroes

Piccola Venezia...

firefox
Citar            
MensajeEscrito el 12 Nov 2007 07:58 am
Resulta que tengo un procedimiento recursivo, siendo uno de sus parámetros un array. El array se modifica para cada llamada recursiva, y como flash pasa los arrays a las funciones por referencia, las modificaciones hechas en el array no solo se conservan en siguientes llamadas recursivas, sino que también las mantiene cuando se "vuelve" de ellas.

Lo de copiar arrays elemento a elemento es porque, para simular un 'paso por valor', lo que hago es copiar elemento a elemento de un array a otro. Si se hace una asignación directamente entre variables de tipo array, lo que se está haciendo relamente es copiar la referencia del array, por lo que ambos compartirán los elementos. Haciendo una copia a mano (con un bucle 'for' por ejemplo) se consigue una copia exacta de la variable array.

Mi pregunta inicial es si existe alguna manera de hacer un paso por valor con arrays sin tener que hacer lo del párrafo anterior.

Saludos.

Por RedSkull

1 de clabLevel



 

msie7
Citar            
MensajeEscrito el 12 Nov 2007 09:07 am
Si el array es unidimensional puedes usar slice().

LLamarías a la función así:

tu_funcion(tu_array.slice());

o si necesitas el array para otras cosas:

nuevo_tu_array= tu_array.slice();
tu_funcion(nuevo_tu_array);


Si ahora modificas tu_array , nuevo_tu_array no tomara esas modificaciones.

Otra cosa es en array múltiple. Ahí tendrás que "copiar" cada dimensión en el array nuevo.

Por Teseo

SWAT Team

1780 de clabLevel

14 tutoriales

Genero:Masculino   SWAT

firefox
Citar            
MensajeEscrito el 12 Nov 2007 03:14 pm
Si el array es unidimensional puedes usar slice().


Muchas gracias, no he caido en hacer el 'apaño' con ese método.

Saludos.

Por RedSkull

1 de clabLevel



 

msie7

 

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