Actualizar Colección Recursivamente


Objetivo: Actualizar Colección Recursivamente
Buenas!

En este ejemplo mediante recursividad se actualizara el contenido de una colección con otra colección.

En una colección tenemos una serie de aplicaciones y versiones
En la otra colección tenemos o bien aplicaciones nuevas con su versión que queremos añadir a nuestra
colección aplicaciones o actualizar las versiones de las aplicaciones que ya teníamos.

Public Sub Main()

Dim aplicaciones As Collection
Dim actualizaciones As Collection

aplicaciones = ["Editores": ["Pluma": 2.3], "Emuladores": ["Fuse Spectrum": 0.9, "Xroar": 1.0]]
actualizaciones = ["Editores": ["Pluma": 2.3, "Gedit": 1.5], "Emuladores": ["Fuse Spectrum": 1.0, "Xroar": 1.0, "PCSX": 0.8]]

actualizacolecrecursiv(aplicaciones, actualizaciones)

End


Public Sub actualizacolecrecursiv(dst As Variant, src As Variant)

Dim k As Variant

For Each k In src
If dst.Exist(src.key) And (TypeOf(src.key) = gb.Object) Then
actualizacolecrecursiv(dst[k.key], src[k.key])
Else
dst[src.key] = src[src.key]
Endif
Next

End


Mostrando el contenido de la colección aplicaciones:

actualizaci_nrecursivacolecci_n

Ejemplo original de Python se puede encontrar en:

https://terminus.ignaciocano.com/20...ario-en-python/

Saludos

Objetivo: Re: Actualizar Colección Recursivamente
Citar:
(TypeOf(src.key) = gb.Object)

¿Y si el elemento de la colección contiene un array?¿o un formulario?

Perfil MP  
Objetivo: Re: Actualizar Colección Recursivamente
shordi escribió: [Ver mensaje]
Citar:
(TypeOf(src.key) = gb.Object)

¿Y si el elemento de la colección contiene un array?¿o un formulario?


Pues sin problema, porque todo es un objeto, al fin y al cabo.

gb.Object es el padre de todos, es la madre del cordero, es como dios, porque es padre y madre al mismo tiempo, ufff, no sé que me he fumado!!!

Espera, espera, que no soy shell, que soy el administrador. Bueno, todo el mundo tiene un día malo

Saludos

Perfil MP  
Objetivo: Re: Actualizar Colección Recursivamente
Pues sin problema, porque todo es un objeto, al fin y al cabo.

No digo que no funcione, que no lo sé, pero hacer recursiva la función que recorre colecciones para que recorra cualquier objeto, pues como que es desvirtuar un poco el tema... ¿no?

Leche calentita y a sudar a la cama, Jesús...

Perfil MP  
Objetivo: Re: Actualizar Colección Recursivamente
La verdad es que no he probado con un array, pero eso tambien es una posibilidad.

Así habría cumplido con el ejemplo que Shordi me pedía en otro post.

Lo cierto es que si vemos una colección de colección de un vistazo, "sin gafas de aumento", parece un array.

Citar:

Espera, espera, que no soy shell, que soy el administrador. Bueno, todo el mundo tiene un día malo




Shell solo puede haber uno. icono_almeja_75715

Saludos!

Objetivo: Re: Actualizar Colección Recursivamente
Citar:

No digo que no funcione, que no lo sé, pero hacer recursiva la función que recorre colecciones para que recorra cualquier objeto, pues como que es desvirtuar un poco el tema... ¿no?


Pues para la POO, le vendría de perlas.

Objetivo: Re: Actualizar Colección Recursivamente
Shordi:

Puedes probar esto para que solo sea colecciones:

Public Sub actualizacolecrecursiv(dst As Variant, src As Variant)

Dim k As Variant

For Each k In src
'If dst.Exist(src.key) And (TypeOf(src.key) = gb.Object) Then
If dst.Exist(src.key) And src[k.key] Is Collection Then
actualizacolecrecursiv(dst[k.key], src[k.key])
Else
dst[src.key] = src[src.key]
Endif
Next

End


El resultado es idéntico. Ahora habría que jugar con los arrays.

Saludos


Página 1 de 1


  
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario

   

Está utilizando la versión (Lo-Fi). Para ver la versión completa del foro, haga clic aquí.

Powered by Icy Phoenix based on phpBB
Design by DiDiDaDo

Página generada en:: 0.2053s (PHP: -27% SQL: 127%)
Consultas SQL: 29 - Debug off - GZIP Activado