Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
Matriz, Array, Structure?¿?¿? No Sé Lo Que Necesito (SOLUCIONADO)
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje Matriz, Array, Structure?¿?¿? No Sé Lo Que Necesito (SOLUCIONADO) 
 
Quiero hacer una aplicación donde manejo una cantidad variable de datos, en realidad son varios grupos de datos, algo así como una structure o una matriz. Por ejemplo cada grupo de datos es del estilo de:

Index, Song, Artist, Size, ID, Status

Y debo de poseer la capacidad de agregar o eliminar grupos de datos.

He estado viendo sobre arrays multidimensionales, pero veo que estos no son dinámicos, que no puedo cambiar el tamaño de la matriz.

Qué tipo de dato, método u objeto me recomiendan a que use?

Gracias!

Saludos!
 



 
última edición por razaAztk el Lunes, 14 Marzo 2011, 03:30; editado 2 veces 
razaAztk - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Matriz, Array, Structure?¿?¿? No Sé Lo Que Necesito 
 
Hola
Necesitas crear un array de objetos donde cada objeto es una clase que tiene esas propiedades.

Pongamos una clase Musica que tiene esto


Tu añades una clase como esa a tu código. En ese formulario (o donde quieras declararlo) haces lo siguiente
Dim Datos as new object[] 'este es el array que contendrá tus datos
Dim Variable as Musica 'declarar una variable de tipo la clase anterior


Ahora cuando quieres agregar una entrada a tu array
Variable=New Musica 'crear la instancia
Variable.Index=1
Variable.Song="   ... "
Variable.Artist=" ... "
Variable.Size=1000
Variable.long=2000
Variable.status=5

Datos.add(Variable)


Con eso tienes guardados tus datos en un array. Solo tienes que controlar el índice de ese array para poder acceder al elemento que quieras. Cuando quieras acceder a un elemento que está en un supuesto índice Ind haces lo siguiente
Variable=Datos[Ind]

Print Variable.index
Print variable.Song
Print Variable.Artist
print Variable.Size
Print Variable.Long
Print Variable.Status

Cuando quieras eliminar un valor
Datos.remove[Ind]


Esa es la mecánica. Solo añadir que a esa clase que le he puesto cinco variables públicas le puedes hacer muchas mas cosas. Puedes hacerle métodos que cuando metas un valor te haga un cálculo puedes hacerle propiedades puedes crearle eventos propios, ... pero la base es lo que te acabo de contar.



Un saludo
 



 
última edición por soplo el Domingo, 06 Marzo 2011, 04:09; editado 1 vez 
soplo - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Matriz, Array, Structure?¿?¿? No Sé Lo Que Necesito 
 
Hey! gracias por la ayuda prestada, ya veo más claro el como funciona eso de la POO, y neta que ofrece muchas ventajas

Pero se me ha presentado otra dificultad en relación a esto, os cuento:

Tengo data vaciada en un ColumnView, y una de sus ventajas es que usa Keys para no repetir datos. Lo que quiero es tener un array de objetos que corresponda con la data en el ColumnView. Ejemplo, tengo en el ColumnView:

Citar:

Key     Song                      Artist
---------------------------------------------------------
"01BDF" "Smells like teen spirit" "Nirvana"
"FG66X" "El 7 mares"              "José Alfredo Jiménez"
"WQL56" "Playa y ska"             "Los pies negros"


Y en el array de objetos

Citar:

Key     Size     Status
-----------------------
"01BDF" "2.4 MB" 1
"FG66X" "3.1 MB" 0
"WQL56" "1.6 MB" 0


Como los elementos en el ColumnView pueden cambiar de posición, cambian los índices; así que la relación entre el ColumnView y el array la haría por medio de la Key. Pero no sé como obtener una trama de datos (bueno, sería más bien un objeto de la clase creada) en función a esa key; he visto el metodo Find, pero ese usa como argumento un objeto............... no tengo idea de como hacer la relación? T_T que me recomiendas investigar?

Gracias, muchas muchas gracias!

Saludos!
 



 
razaAztk - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Matriz, Array, Structure?¿?¿? No Sé Lo Que Necesito (casí SOLUCIONADO) 
 
A ver............. que tal ven está solución media chafa que me he sacado?¿?:

Creé una función cuyos argumentos son un array de objetos (que contiene objetos de la clase creada) y la key buscada; recorre todos los valores key de cada objeto y regresa el valor del índice cuando es encontrada:

PUBLIC FUNCTION Find_Index(array_objects AS Object[], KeyX AS String) AS Integer
  
  DIM iCount AS Integer
  
  FOR iCount = 0 TO array_objects.Count - 1
    IF array_objects[iCount].Id = KeyX THEN RETURN iCount
  NEXT
  
  RETURN -1
  
END
 


.
 .
 .
  PRINT Find_Index(bd_results, "01BDF")
 .
 .
 .
 


Aunque si conocen una mejor forma de hacer lo que quiero sería genial que me diesen más pistas, je!

Nuevamente, gracias Soplo!

Saludos!
 



 
razaAztk - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Matriz, Array, Structure?¿?¿? No Sé Lo Que Necesito (casí SOLUCIONADO) 
 
Soplo:

Muchas gracias por tu explicación, me es muy útil, hoy estoy haciendo un programa que la va a utilizar....   :mryellow:, espero terminarla pronto y ponerla a disposición del foro...

Pero una pregunta :

Citar:
puedes crearle eventos propios


¿¿¿Como se hace eso...???

Te agradecería, si tienes tiempo, hacer una "pequeña guía", como cuando hacías para definir los controles (tableviews, gridviews, etc...), sobre poo.

Gracias de nuevo.
 




===================
Blog personal
Web: SoloGambas seleccion de articulos dedicados a Gambas
Visita el Curso de Gambas3 ¡¡¡Gratuito!!!
 
jsbsan - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Matriz, Array, Structure?¿?¿? No Sé Lo Que Necesito (casí SOLUCIONADO) 
 
Pues no te lo puedo decir con seguridad porque nunca lo he hecho. Estoy pensando en hacerlo porque me he dado cuenta que algún código que tengo por ahí sería mejor y mas sencillo de mantener si una de esas clases tuviera sus propios eventos, para dentro de algún tiempo me pondré a ello. Ahora estoy terminando la revisión de mi software (parches y demás) que tenía pendiente desde que me fuí. Además estoy próximo a sacar una nueva versión y me está dando trabajo y además tengo el proyecto de crear un crystal report para gambas que lo tengo a medias

Pero esa es otra idea que tengo en mente.

Si quieres investigar lo que hay que hacer es crear una clase con el código de los eventos y ahí esos eventos los declaras así
Citar:
EVENT Name ( [ Parameter #1 [ , Parameter #2 ... ] )

y luego para que un objeto utilice esos eventos le haces un attach
object.attach "clase de eventos"

Mas o menos es eso, pero ya te digo que eso lo tengo por probar

 

---------------------------------------------------------------------------------------------------------------------

Citar:
Como los elementos en el ColumnView pueden cambiar de posición, cambian los índices; así que la relación entre el ColumnView y el array la haría por medio de la Key

Estuve a punto de ponerte eso porque es un caso muy común pero preferí escribirte solo de un array al que accedes mediante un índice porrque lo importante es la comprensión.

Ahora que lo entendiste te explico lo que te pasa. En un columnview (u otra cosa) tu no tienes un índice numérico sino una clave y quieres poder encontrar por esa clave que procede de un columnview, de un treeview o es cualquier código que te has calculado o te han escrito en un textbox ¿Como lo encuentras?

Pues la respuesta es que necesitas tu tabla de objetos y una tabla de índices. La primea es la que te expliqué antes. La segunda es donde guardas las claves.

Siguiendo con el ejemplo anterior tu tienes tu datos[] as new string[] donde guardas todos tus objetos y puedes acceder a ellos mediatne un índice solo que tu no tienes un índice numérico sino una clave.

Pues creas otra tabla de claves así
Dim Claves as new string[]
Dim Datos as new Object[]


Cuando quieres insertar un dato (en tu ejemplo insertas algo en un columnview
1. Haces el insert en el columnview: columnview.add(key, ...)
2. Haces el insert en la tabla de objetos
   Variable=NEW musica
   Variable = ... 'aquí metes datos
   Datos.add(Variable) 'aquí metes los datos en tu array
3 Guardas la clave en un array
   Claves.add(key) 'esto es lo nuevo con respecto a lo anterior. Guardas la clave en un array

Con eso ya metiste las cosas en su sitio.

'Cuando quieres buscar ls música y conoces su índice haces
Variable=Datos[Indice]
'Pero si lo que sabes es la clave del columnview en vez del índice haces
Dim Indice as integer
Indice=Claves.find(key) 'buscar la clave en la tabla de claves. Obtienes su posición
Variable=Datos[Indice]

'Esto lo puse así para que se comprendiera mejor pero puedes hacerlo en un solo paso
Variable=Datos[Claves.find(key)]

Da igual el orden en que las cosas estén en el columnview. Tu buscas una clave en su tabla

Cuando quieras borrar un índice X
Datos.Remove(X)
Claves.Remove(X)
 
Cuando quieras borrar una clave key
Datos.Remove(Claves.find(key))
Claves.Remove(Claves.find(key))

 



 
última edición por soplo el Domingo, 06 Marzo 2011, 15:19; editado 1 vez 
soplo - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Matriz, Array, Structure?¿?¿? No Sé Lo Que Necesito (casí SOLUCIONADO) 
 
Soplo:

jo... que cosas sabe hacer....   

Saludos
 




===================
Blog personal
Web: SoloGambas seleccion de articulos dedicados a Gambas
Visita el Curso de Gambas3 ¡¡¡Gratuito!!!
 
jsbsan - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Matriz, Array, Structure?¿?¿? No Sé Lo Que Necesito (casí SOLUCIONADO) 
 
razaAztk escribió: [Ver mensaje]
A ver............. que tal ven está solución media chafa que me he sacado?¿?:

Creé una función cuyos argumentos son un array de objetos (que contiene objetos de la clase creada) y la key buscada; recorre todos los valores key de cada objeto y regresa el valor del índice cuando es encontrada:

Aunque si conocen una mejor forma de hacer lo que quiero sería genial que me diesen más pistas, je!


Si vas a recuperar los objetos a partir de una clave de tipo String deberías utilizar una colección no un array. Te ahorrarás esa funciónporque podrás recuperar los objetos directamente con la clave.
 




===================
Cómo programar con Gambas

Speed Books: informática libre.
 
fabianfv - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Matriz, Array, Structure?¿?¿? No Sé Lo Que Necesito (casí SOLUCIONADO) 
 
Hey Soplo! buen truco ese! gracias!

@Fabian:
Gracias por la info, pero no se como usarlo con la clase creada, por ejemplo, tengo el sig código:

  DIM var AS dataFile
  DIM cData AS Collection
  
  var = NEW dataFile
  var.Artist = "Ska-P"
  var.Id = "01F8QW"
  var.Index = 0
  var.Size = "1.4 MB"
  var.Song = "Welcome to Hell"
  var.Status = 0
  
  cData.Add(var, var.Id) ' ERROR: Null object
 


pero me marca un error (Null object), he visto la documentación de Collection y me dice que los argumentos son un Variant y un string, pero no se como manipular variants.

Gracias a todos! y................... Saludos!
 



 
razaAztk - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Matriz, Array, Structure?¿?¿? No Sé Lo Que Necesito (SOLUCIONADO) 
 
añade NEW

Dim cDatas as NEW Collection.



Suerte
 




===================
No podemos regresar
 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
Ocultar¡Este tema fue útil?

 

Elegir valoración:                       

Media de valoración Valoración mínima Valoración máxima Número de valoraciones
5.00 0 10 2
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Necesito Una Matriz En Uno De Mis Objetos cyberx0x General 2 Sabado, 07 Noviembre 2009, 17:30 Ver último mensaje
shordi
No hay nuevos mensajes Array Matriz Arreglo Diferencia Entre Add ... tincho Aplicaciones/Fragmentos de Código 3 Jueves, 05 Enero 2017, 20:53 Ver último mensaje
vuott
No hay nuevos mensajes El Ejemplo Definitivo De Matriz, Array, Ar... tincho Aplicaciones/Fragmentos de Código 7 Martes, 10 Enero 2017, 19:47 Ver último mensaje
tincho
No hay nuevos mensajes Cadena A Matriz [SOLUCIONADO] skhaliburg General 3 Sabado, 25 Septiembre 2010, 20:06 Ver último mensaje
jsbsan
 

Publicar nuevo tema  Responder al tema  Página 1 de 1
 

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
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
No puede descargar archivos
No puede publicar eventos en el calendario