|
Página 1 de 1
|
El Ejemplo Definitivo De Matriz, Array, Arreglo, De 2 Dimensiones.
Autor |
Mensaje |
tincho
Analista Programador
Registrado: Noviembre 2014
Mensajes: 2565
Edad: 48 Ubicación:
|
El Ejemplo Definitivo De Matriz, Array, Arreglo, De 2 Dimensiones.
Hola a todos.
Estoy intentando cambiar la forma de trabajo que vengo usando para manejar colecciones de datos y decidí volver a probar (otra vez ) con las matrices de dos dimensiones, es decir una matriz donde cada elemento de esta es a su vez otra matriz.
Hice este ejemplo para probar y si bien logre crear, recuperar y modificar elementos no doy con la forma de buscar por algún elemento anidado.
Public Sub Form_Open()
Dim stx2d As New String[][]
Dim stx2dTmp1 As New String[][]
Dim stx2dTmp2 As New String[][]
Dim int As Integer
stx2dTmp1.Add(["contactos", "nombre", "string"])
stx2dTmp1.Add(["contactos", "apellido", "string"])
stx2dTmp1.Add(["contactos", "email", "string"])
stx2dTmp2.Add(["paises", "pais", "string"])
stx2dTmp2.Add(["paises", "continente", "string"])
stx2dTmp2.Add(["paises", "codigo", "string"])
stx2d.Insert(stx2dTmp1)
stx2d.Insert(stx2dTmp2)
For int = 0 To stx2d.Max
If stx2d[int][1] = "email" Then
Print stx2d[int][1]
stx2d[int][1] = "nuevo@email.org"
Print stx2d[int][1]
Endif
Next
Print stx2d.Count
End
Si alguno ya lo ha solucionado me vendría bien esa experiencia, muchas gracias.
Les juro que he visto un montón de posts de este tema y no logro resolverlo en un caso práctico para aplicarlo.
Saludos.
|
#1 Jueves, 05 Enero 2017, 13:19 |
|
|
jsbsan
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4175
Edad: 51 Ubicación: dos hermanas, sevilla
|
Re: El Ejemplo Definitivo De Matriz, Array, Arreglo, De 2 Dimensiones.
Tincho:
Con estructura de datos complejos, yo suelo trabajar con Variant[] y dentro de ellas Colecciones
Te dejo un ejemplo.
Esta forma de trabajar, te permite crear estructuras de datos muy complejos, ya que los Variant[] pueden contener otros Variant y/o Colecciones y estas a su vez más Variant/Colecciones.
Ademas suelo crear listas de cadenas con las "Key", de las colecciones, para realizar búsquedas de los datos.
Para guardar estas estructuras de datos "complejas", las convierto en formato json.
Un ejemplo "real", es una aplicación que estoy terminando que se llama bingoedu:
https://github.com/jsbsan/bingoedu
Descripción: |
|
Descargar |
Nombre del archivo: |
ejemploVarColecciones-0.0.1.tar.gz |
Tamaño: |
11.06 KB |
Descargado: |
38 veces |
Descripción: |
|
Descargar |
Nombre del archivo: |
ejemploVarColecciones-0.0.1.tar.gz |
Tamaño: |
11.06 KB |
Descargado: |
38 veces |
Descripción: |
|
Descargar |
Nombre del archivo: |
ejemploVarColecciones-0.0.1.tar.gz |
Tamaño: |
11.06 KB |
Descargado: |
38 veces |
|
#2 Jueves, 05 Enero 2017, 19:01 |
|
|
Shell
Analista Programador
Registrado: Marzo 2010
Mensajes: 5278
Edad: 53 Ubicación: Al otro lado de la pantalla
|
Re: El Ejemplo Definitivo De Matriz, Array, Arreglo, De 2 Dimensiones.
Creo que cuando vamos a tratar o crear una estructura de datos para nuestro programa, mas que usar una u otra,
debemos usar la que más nos convenga y la facilidad a la hora de trabajar con ella.
No es lo mismo hablar de coordenadas que el manejo de los datos de un cliente.
Luego tambien hay que tener en cuenta, el volumen de datos que vamos a manejar.
Si es pequeño quizás no necesitemos una base de datos.
El anidamiento que puede crearse dentro de la estructura puede llegar a ser bastante complejo.
En el ejemplo de las provincias de Andalucía, podíamos haber querido especificar cuales tienen costa.
La estructura se puede ir complicando. ¿ Hasta que nivel queremos complicarnos ?.
¿ Es necesario llegar a un nivel tan complicado ?.
Llegará un momento que lo mejor será una base de datos.
Saludos
=================== Gambas Básico
"No es un bug, es una característica no documentada"
|
#3 Sabado, 07 Enero 2017, 10:59 |
|
|
tincho
Analista Programador
Registrado: Noviembre 2014
Mensajes: 2565
Edad: 48 Ubicación:
|
Re: El Ejemplo Definitivo De Matriz, Array, Arreglo, De 2 Dimensiones.
...Llegará un momento que lo mejor será una base de datos.
En mi caso, uso las listas de dos dimensiones para el manejo de información de configuración que se apoya en gb.settings generalmente para guardar y recuperar dicha información o, menos frecuentemente en bases de datos. Esta configuración se lee una vez al inicio del programa y luego se cambia en la dichosa lista bidimensional, y al finalizar el programa se guarda lo que haya cambiado para que la próxima vez todo este como lo dejamos.
Luego esta la información que se maneja en el programa y que pertenece al conjunto de los "datos" que no esta relacionados con la configuración o el funcionamiento sino con el trabajo que se hace con el programa, como puede ser coordenadas, materiales, almacén, direcciones de contactos etc. en ese punto esta claro que una base de datos el lo suyo, opino.
Saludos.
|
#4 Sabado, 07 Enero 2017, 18:16 |
|
|
shordi
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4982
Edad: 64 Ubicación: Albacete
|
Re: El Ejemplo Definitivo De Matriz, Array, Arreglo, De 2 Dimensiones.
Citar: En mi caso, uso las listas de dos dimensiones para el manejo de información de configuración que se apoya en gb.settings generalmente para guardar y recuperar dicha información o, menos frecuentemente en bases de datos. Esta configuración se lee una vez al inicio del programa y luego se cambia en la dichosa lista bidimensional, y al finalizar el programa se guarda lo que haya cambiado para que la próxima vez todo este como lo dejamos.
Tal cosa he hecho yo durante muchos años, y aún tengo rulando programas que hacen eso. Sin embargo un día me dí cuenta que la diferencia entre el tiempo de reacción de settings y el tiempo de consulta de una variable no tienen importancia ninguna si tienes en cuenta que normalmente se leen una vez al empezar y luego esporádicamente al bucar un path o algo así. Si un valor de settings se cambia, se almacena en el momento. Si un valor de settings se usa en un bucle (donde sería de tener en cuenta esa diferencia) lo paso a una variable local antes del bucle y punto.
=================== No podemos regresar
última edición por shordi el Lunes, 09 Enero 2017, 10:38; editado 1 vez
|
#5 Lunes, 09 Enero 2017, 10:37 |
|
|
tincho
Analista Programador
Registrado: Noviembre 2014
Mensajes: 2565
Edad: 48 Ubicación:
|
Re: El Ejemplo Definitivo De Matriz, Array, Arreglo, De 2 Dimensiones.
Tal cosa he hecho yo durante muchos años, y aún tengo rulando programas que hacen eso. Sin embargo un día me dí cuenta que la diferencia entre el tiempo de reacción de settings y el tiempo de consulta de una variable no tienen importancia ninguna si tienes en cuenta que normalmente se leen una vez al empezar y luego esporádicamente al bucar un path o algo así. Si un valor de settings se cambia, se almacena en el momento. Si un valor de settings se usa en un bucle (donde sería de tener en cuenta esa diferencia) lo paso a una variable local antes del bucle y punto.
Si, comprendo perfectamente lo que decis. y eso de mantener simple "kiss".
En mi caso, cada vez que cambio la tabla en un treeview por ejemplo, el grid debe modificar los datos y las columnas, y leer unos 300 datos de promedio para buscar ajustar y acomodar todo óptimamente, así que lo de leer esporádicamente el gb.settings no se aplicaría en este caso.
Pero créeme que he llegado a este método porque eso es justamente lo que busco, simplificar las cosas. Cuando comienzo un programa con bases de datos, por mas que planifique y diseñe la base siempre surge algo nuevo o algo para optimizar. Luego está el tema de manejar los títulos de los campos en el GridView y Label y que además se puedan traducir a los otros idiomas. también está el tema de importación y exportación de datos en los que los .csv o similares no siempre van a coincidir en el orden exacto de las columnas de la base o el grid.
Bueno, finalmente toda esta "Meta" información accesoria a la base y se guarda en gb.settings como sitio "natural " en gambas pero cuando la cantidad de campos es grande....
Supongamos el caso práctico de una agenda de contactos modesta que usa claves foráneas y tiene un total de 30 campos entre todas las tablas y 30 campos más para las vistas de estas tablas para que en el grid en vez de aparecer números aparezcan palabras (en el caso de foráneas). Eso nos deja en 60.
Si tenemos 10 parámetros para cada campo eso nos da un total de 600 valores para manejar con gb.settings, lo cual implica buscar ordenar y modificar.
Gb.Settings + 20variables
Si nos manejamos solo con gb.settings eso nos da 10 variables para todos los parámetros cada vez que cambiamos de campo, y, digamos, 5 variables mas para cada vez que ese campo sea foráneo podríamos estimar en 20 variables solo para los metadatos de cada campo que el bucle del evento Data_ o de creación de controles para editar registros o de importación / exportación de datos etc. etc.
En este caso se usan muchas variables y si se quiere extender hay que crear más variables.
Gb.Settings + 1 variables bidimensional
Para los mismos metadatos, con solo una variable [0,1,2,...,n] se pueden gestionar todos estos y si se quiere extender es una posición más de esta, sin tener que crear más variables. El código es mas limpio y sencillo y se puede estandarizar la forma de trabajo para varios programas, acelerando la creación de programas eficientes ya que leer y escribir en memoria siempre es más rápido que en disco, por lo menos de momento.
Saludos.
|
#6 Martes, 10 Enero 2017, 14:34 |
|
|
shordi
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4982
Edad: 64 Ubicación: Albacete
|
Re: El Ejemplo Definitivo De Matriz, Array, Arreglo, De 2 Dimensiones.
Es que settings no es para eso. Realmente creo que te complicas innecesariamente.
Citar: Cuando comienzo un programa con bases de datos, por mas que planifique y diseñe la base siempre surge algo nuevo o algo para optimizar.
¿ ?
Citar: Luego esta el tema de manejar los títulos de los campos en el GridView y Label y que ademas se puedan traducir a los otros idiomas.
¿Qué problema hay? para eso están los nombres de campo o las cabeceras de columna.
Citar: también esta el tema de importación y exportación de datos en los que los .csv o similares no siempre van a coincidir en el orden exacto de las columnas de la base o el grid.
¿Por qué no?
=================== No podemos regresar
última edición por shordi el Martes, 10 Enero 2017, 17:49; editado 2 veces
|
#7 Martes, 10 Enero 2017, 15:46 |
|
|
tincho
Analista Programador
Registrado: Noviembre 2014
Mensajes: 2565
Edad: 48 Ubicación:
|
Re: El Ejemplo Definitivo De Matriz, Array, Arreglo, De 2 Dimensiones.
Es que settings no es para eso. Realmente creo que te complicas innecesariamente.
Citar: Cuando comienzo un programa con bases de datos, por mas que planifique y diseñe la base siempre surge algo nuevo o algo para optimizar.
¿ ?
Citar: Luego esta el tema de manejar los títulos de los campos en el GridView y Label y que ademas se puedan traducir a los otros idiomas.
¿Qué problema hay? para eso están los nombres de campo o las cabeceras de columna.
Citar: también esta el tema de importación y exportación de datos en los que los .csv o similares no siempre van a coincidir en el orden exacto de las columnas de la base o el grid.
¿Por qué no?
Que quieres que te diga, para gustos los colores. .
Saludos.
|
#8 Martes, 10 Enero 2017, 19:47 |
|
|
|
Temas parecidos
Temas parecidos
Tema |
Autor |
Foro |
Respuestas |
último mensaje |
|
Matriz, Array, Structure?¿?¿? No Sé Lo ...
|
razaAztk |
General |
9 |
Lunes, 14 Marzo 2011, 09:33 shordi |
|
Ordenar Una Matriz De Dos Dimensiones [SOL...
|
shordi |
General |
5 |
Miercoles, 03 Abril 2013, 19:41 shordi |
|
Array De 2 Dimensiones String Collections ...
|
tincho |
Aplicaciones/Fragmentos de Código |
2 |
Sabado, 16 Abril 2016, 15:49 tincho |
|
Array Matriz Arreglo Diferencia Entre Add ...
|
tincho |
Aplicaciones/Fragmentos de Código |
3 |
Jueves, 05 Enero 2017, 20:53 vuott |
|
Página 1 de 1
|
Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado Usuarios registrados conectados: Ninguno
|
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
|
|
|
|
|