viernes, 10 de mayo de 2024

OOo Basic. Datos.

Matrices multidimensionales

Además de las matrices unidimensionales [que ya vimos], también podemos definir matrices multidimensionales, esto es, matrices que constan de al menos dos dimensiones.



La forma de declarar una matriz multidimensional es la siguiente:

Dim Nombre_Matriz( Tamaño As Integer, Tamaño As Integer) As Tipo

Esta matriz tiene dos dimensiones definidas por las variables que contiene el paréntesis que sigue al nombre de la matriz. Podría tener todas las dimensiones que deseáramos, pero cuantas más tenga, más complejo es su manejo, lo que no implica que no pueda ser de utilidad en determinadas circunstancias (1).

Una matriz bidimensional se puede entender como una tabla de una hoja de cálculo como, por ejemplo...


... que sería la representación de una matriz tridimensional (mMatriz(2,2)). La forma de introducir valores y acceder a cada uno de ellos sería como sigue:

Sub MatrizMulti1

Dim mDatos( 2, 2 ) As String

'Asociamos contendidos a los índices

mDatos( 0, 0 ) = "Casa"
mDatos( 0, 1 ) = "Puerta"
mDatos( 0, 2 ) = "Ventana"
mDatos( 1, 0 ) = "Animal"
mDatos( 1, 1 ) = "Perro"
mDatos( 1, 2 ) = "Gato"
mDatos( 2, 0 ) = "Trabajo"
mDatos( 2, 1 ) = "Sodador"
mDatos( 2, 2 ) = "Fontanero"

'Mostramos algunos datos

MsgBox mDatos( 0, 0 ) & " - " & mDatos( 0, 1 )
MsgBox mDatos( 1, 0 ) & " - " & mDatos( 1, 1 )
MsgBox mDatos( 2, 0 ) & " - " & mDatos( 2, 1 )

End Sub

Como puedes ver, he creado una matriz tridimensional (Dim mDatos( 2, 2 ) As String) a la que he dado contenido siguiendo la lógica de campos semánticos cuyo término superior sitúo en la "columna" 0 (mDatos( 0, 0 ) = "Casa" -> Palabras asociadas al campo semántico "Casa") y dos ejemplos de términos asociados a dicho campo semántico en las columnas 1 y 2 (mDatos( 0, 1 ) = "Puerta" mDatos( 0, 2 ) = "Ventana").

Este ejemplo te puede dar una idea de posible uso: crear una base de datos que asocia un identificador con un determinado contenido. Por ejemplo: NIE (Id), Nombre y Apellidos de una lista de alumnos.

En este caso, la matriz a declarar tendía tres columnas y tantas filas como alumnos quisiéramos incluir en nuestra "base de datos" (6 en el ejemplo que sigue)


Sub MatrizMulti2

Dim mDatos( 5, 2 ) As String
Dim i As Integer

'Introducimos los datos

mDatos( 0, 0 ) = "123456"
mDatos( 0, 1 ) = "Roberto"
mDatos( 0, 2 ) = "Marcial Pérez"
mDatos( 1, 0 ) = "123865"
mDatos( 1, 1 ) = "Maria"
mDatos( 1, 2 ) = "Martinez Sanz"
mDatos( 2, 0 ) = "123907"
mDatos( 2, 1 ) = "Adela"
mDatos( 2, 2 ) = "Decastro Morán"
mDatos( 3, 0 ) = "1124156"
mDatos( 3, 1 ) = "Antonio"
mDatos( 3, 2 ) = "Hernández Jiménez"
mDatos( 4, 0 ) = "124245"
mDatos( 4, 1 ) = "Matías"
mDatos( 4, 2 ) = "Luján López"
mDatos( 5, 0 ) = "124596"
mDatos( 5, 1 ) = "Amalia"
mDatos( 5, 2 ) = "Desantos Melquiadez"

' Y los mostramos

For i = 0 To 5
MsgBox mDatos( i, 0 ) & " - " & mDatos( i, 1 )  & " " & mDatos( i, 2 )
Next

End Sub

Este script reproduce la tabla precedente. Se basa en una matriz multidimensional (Dim mDatos( 5, 2 ) As String) cuya primera dimensión (5) indica el número de filas (6 alumnos ) y la segunda (2) el número de de columnas (3 datos por cada alumno). Refleja el potencial de este tipo de matrices para el trabajo con tablas y sugiere posibles usos muy interesantes (2)

NOTAS

(1) En realidad esta es una recomendación de Mauricio Baeza. Este autor recomienda no usar matrices de más de tres dimensiones por su dudosa utilidad. En principio me parece una buena recomendación si con ello nos referimos a no sobrepasar dos índices por matriz (mDatos( 5, 2 ) frente a mDatos( 5, 2,2)) por la dificultad de representación (tres ejes y dimensionas) y manejo de este tipo de estructuras, pero la primera formulación, que reproduce la estructura de una tabla (filas x columnas) me parece muy interesante como recurso para el trabajo con tablas.
(2) Cierto que es posible trabajar con tablas empleando matrices unidimensionales, pero necesitamos una matriz por columna, lo que en el ejemplo anterior supone utilizar tres matrices. En tablas de dimensiones limitadas, como la del ejemplo, el uso de matrices unidimensionales no parece ser una mala opción, pero si la tabla tuviera muchas más columnas, crear tantas matrices (unidimensionales) como columnas (campos) tuviera la tabla complicaría considerablemente  la creación del script y entorpecería su funcionamiento. El uso de una matriz multidimensional (bidimensional, en realidad) facilitaría sustancialmente el trabajo, compensando la mayor dificultad de uso que presenta.

No hay comentarios:

Publicar un comentario

Comenta esta entrada