Array De Colecciones


Objetivo: Array De Colecciones
Buenas!.

Acostumbrado a una colección de array estuve viendo muy por encima lo que es un array de colección.
Yo creo que siempre será más fácil y más rápido el uso de las colecciones frente a los arrays.

Private personas As New Collection[]

Public Sub Main()
Dim unapersona As Collection

unapersona = New Collection
With unapersona
.Add("Antonio", "Nombre")
.Add("Masculino", "Sexo")
.Add(25, "Edad")
End With
personas.Add(unapersona)

unapersona = New Collection
With unapersona
.Add("Maria", "Nombre")
.Add("Femenino", "Sexo")
.Add(23, "Edad")
End With
personas.Add(unapersona)

Stop

End


arraydecolecciones

Encontrar la estructura de datos para un ejemplo no siempre es sencillo.
Desde luego tener que estar recorriendo todo el array es un proceso algo mas lento que usar una clave.

¿ Mejorarías el ejemplo ?.
Si desde luego estas buscando por nombres, un sexo, una edad. Pero eso parece más de colección.

Si viéramos un mapa de estrellas que están dentro de una rejilla de dos dimensiones. Si fuéramos por su coordenada x e y dentro
de ese array virtual podríamos ver que estrellas existen dentro de esa retícula. Con un click de ratón por ejemplo.
En cambio con las colecciones ya sería buscar por un termino concreto.

Saludos

última edición por Shell el Viernes, 29 Septiembre 2017, 13:46; editado 1 vez
Objetivo: Re: Array De Colecciones
Estas usando una base de datos?

última edición por jguardon el Jueves, 12 Octobre 2017, 17:18; editado 1 vez
Objetivo: Re: Array De Colecciones
Torrealba2719:

Citar:

Estas usando una base de datos?


No, tan solo es un ejemplo de tipo de arreglo o array. Hice un pequeño ejemplo por si algunos
de los compañeros de la comunidad le encuentran ellos una utilidad a este tipo de estructura de datos
o por si ellos lo han usado para un motivo concreto.

Normalmente suelo usar más las colecciones.

Saludos

Objetivo: Re: Array De Colecciones
Eso lo utilizo para recuperar los datos originales que son mostrados en un gridView.
Copio y pego el código extraído del control dbGrid, que forma parte de los dbControles (disponible en la Granja de gambas). El propósito es que, dado que el grid sólo muestra cadenas de texto y cuando muestras una base de datos eso no es correcto, pues que devuelva un array de colecciones que contienen los datos originales de tabla.

Private Function Values_Read() As Variant[]

Dim n, c As Integer
Dim clave, valor As String
Dim actual As New Collection
Dim ar As New Variant[]
Dim v As Variant
Dim tipo As Integer

For c = 0 To Me.Rows.Selection.Count - 1
actual = New Collection
For n = 0 To Me.columns.Count - 1
valor = IIf(Me[Me.Rows.Selection[c], n].text = "", Me[Me.Rows.Selection[c], n].richText, Me[Me.Rows.Selection[c], n].text)
tipo = $rs.Fields[n].type
If tipo = gb.Null Then
v = Null
Else If tipo = gb.String Then
v = valor
Else If tipo = gb.Date Then
v = Val(valor)
Else 'If tipo = gb.Boolean Or If tipo = gb.byte Or If tipo = gb.short Or If tipo = gb.Integer Or If tipo = gb.long Or If tipo = gb.Single Or If tipo = gb.Float Or If tipo = gb.Date Then
v = Val(valor)
Endif
clave = Me.rslt.Fields[n].Name
actual.Add(IIf(IsNull(v), "", v), clave)
Next
ar.Add(actual)
actual = Null
Next

Return ar

End


Devuelve un array con una colección por cada fila seleccionada del GridView que contiene todos los campos correspondientes a las columnas mostradas pero en su formato original (numérico, texto o lo que sea).

última edición por shordi el Sabado, 30 Septiembre 2017, 07:39; editado 1 vez
Perfil MP  
Objetivo: Re: Array De Colecciones
Shordi:

¿ Cómo es que no usaste un Select Case con la variable tipo ?.
No parece tanto código usando uno u otro.

Saludos

Objetivo: Re: Array De Colecciones
Shell escribió: [Ver mensaje]
Shordi:

¿ Cómo es que no usaste un Select Case con la variable tipo ?.
No parece tanto código usando uno u otro.

Saludos

Es código fósil... antes estaba activa la línea
Else 'If tipo = gb.Boolean Or If tipo = gb.byte Or If tipo = gb.short Or If tipo = gb.Integer Or If tipo = gb.long Or If tipo = gb.Single Or If tipo = gb.Float Or If tipo = gb.Date Then


y otras muchas que hacían verificaciones varias en las condiciones de los if... luego fuí simplificando las condiciones hasta llegar a lo que ves, pero sin plantearme nunca el cambio "simplemente porque estaba ahí"

Saludos

Perfil MP  

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.7649s (PHP: -85% SQL: 185%)
Consultas SQL: 48 - Debug off - GZIP Activado