Apúntate...


Consultas, desarrollo de programas y petición de presupuestos:

miércoles, 22 de agosto de 2012

Diferencias entre Arrays y Colecciones


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


1 comentario:

A falta de donativos... un poco de publicidad