El intérprete de Gambas le ofrece dos tipos de clases de contenedores nativos:
Arrays
Una matriz es un conjunto de valores indexados por un entero que son consecutivos en la memoria.Todos los valores de una matriz tienen el mismo tipo de datos, y hay una amplia clase para cada tipo de datos nativo, excepto Boolean .
Las matrices pueden ser multi-dimensional, es decir, valores son indexados por más de un Integer .
Si una matriz tiene una dimensión, entonces se puede ampliarse de forma dinámica, con el método de cambio de tamaño (.resize)
Colecciones
Una colección es un conjunto de valores indexados por una cadena .Sólo el tipo de variant pueden ser almacenados en una colección .
Los valores se almacenan internamente en una tabla hash que crece dinámicamente cuando más y más elementos se insertan en el mismo.
¿Diferencias de uso?
He aquí una breve comparación entre los tres tipos de clases de contenedores:
Contenedor Tabla
Comparativa
Arrays | Colección | |
---|---|---|
El almacenamiento interno | Un bloque de memoria. |
Tabla hash.
Esto significa que una matriz de ranuras, cada una siendo una
lista vinculada de los valores que tienen el mismo código hash.
|
Llave tipo de datos (indice) |
Entero | Cadena |
La velocidad de acceso |
Inmediato
El acceso es inmediato.
|
Rápido
La llave debe ser comparado con todas las otras teclas que
tengan el mismo código hash.
|
Inserción velocidad |
Inmediata o lenta
El bloque de memoria a veces se cambia de tamaño si es
necesario. Y la inserción en el medio de la matriz necesita mover
una parte del bloque de memoria.
|
Rápido o Lento
El código hash de clave da un
índice en una lista vinculada de ranuras de memoria.
La tabla hash tiene que ser redimensionado y recalculado a
veces para mantener el rápido acceso.
|
Supresión de velocidad |
Inmediata o lenta
El bloque de memoria a veces se cambia de tamaño si es
necesario. Y eliminar en el medio de la matriz necesita mover una
parte del bloque de memoria.
|
Rápido o Lento
Una vez que el elemento se
encuentra, la eliminación es inmediata.
La tabla hash tiene que ser redimensionado y recalculado a
veces para mantener el rápido acceso.
|
Ejemplo:
Public Sub Main()
Dim cAbbr2Weekday As Collection = ["mo": "Monday", "tu": "Tuesday", "we": "Wednesday", "th": "Thursday", "fr": "Friday", "sa": "Saturday", "su": "Sunday"]
Dim cCopy As Collection
Dim sAbbr As String
' Acceder a un dato de la colección:
Print cAbbr2Weekday["fr"]
' Mostrando Key y valor
For Each sAbbr In cAbbr2Weekday
Print cAbbr2Weekday.Key & " --> " & sAbbr
Next
' Retorna el numero de elementos de la colección (en este caso 7)
Print cAbbr2Weekday.Count
Print cAbbr2Weekday.Length
' .add: Añade un nuevo elemento, y luego lo borra (.remove)
cAbbr2Weekday.Add("sat", "Saturday")
cAbbr2Weekday.Remove("sat")
' Comprueba si existe un elemento pasando la llave
Print cAbbr2Weekday.Exist("we")
' Hace una copia de la colección y limpia la colección original
cCopy = cAbbr2Weekday.Copy()
cAbbr2Weekday.Clear()
End
Enlace GambasWiki:
http://gambaswiki.org/wiki/comp/gb/collection
Gracias por la informacion. Me es de mucha ayuda.
ResponderEliminar