Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
Param
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje Param 
 
Buenos días!.

Quiero pasar un número indeterminado de arrays a una función cuyo argumento ( perdonar si me lio ahora por la mañana ) es ...
Luego de cada array averiguo el número de elementos que contiene cada uno y si hay diferencia entre estos, recorto los arrays
al número mínimo de elementos que tiene el array de menos elementos.

Pero lo cierto es que lo he intentado con Param y no recorta, siempre se queda igual...

Public Sub Main()
  
  Dim paises As String[] = ["China", "India", "Estados Unidos", "Indonesia"]
  Dim poblaciones As Integer[] = [1391, 1364, 327, 264]
  Dim importaciones As String[] = ["Arroz", "Trigo", "Petroleo"]
 
  Agrupar(paises, poblaciones, importaciones)
  
End

Public Function Agrupar(...)
  
  Dim aelementos As New Variant[]  
  Dim i As Integer  
  
  Dim minnumelementos As Integer
  
  minnumelementos = Min(Param[0].count, Param[1].Count)
  For i = 2 To Param.Max  
    Print Param[i].Count
    minnumelementos = Min(minnumelementos, Param[i].Count)
  Next
  
  For Each aelementos In Param
    aelementos.Resize(minnumelementos)
  Next
  
  Stop
  
End
 


¿ No se supone que al variar aelementos estoy variando el array original de Param ?.  
¿ No es una referencia ?.

De principio la función ahora mismo solo recorta, luego la iré ampliando.  

Por ejemplo, en este caso debe dar que el número mínimo es de 3 elementos.
Tanto Indonesia de países como el número de habitantes de Indonesia deberían desaparecer de los arrays,
de Param y de los array s originales.  Pero al revisar el contenido de Param, sigue igual...

 contenidonovaria

Saludos
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Param 
 
En este ejemplo funciona pero no uso Param.

Public Sub Main()
  
  Dim varios As String[][] = [["China", "India", "Estados Unidos", "Indonesia"], ["100", "200", "300", "400"]]
  Dim atmp As New String[]
  
  For Each atmp In varios
    atmp.Resize(3)
  Next
  
  Stop
  
End
 


 ejemplofuncionando

Otra forma más manual.

Public Sub Main()
  
  Dim varios As String[][] = [["China", "India", "Estados Unidos", "Indonesia"], ["100", "200", "300", "400"]]
  
  'Otra forma más manual
  
  varios[0].Resize(3)
  varios[1].Resize(3)
  
  Stop
  
End
 


Saludos
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Param 
 
La solución.

Public Function Agrupar(...)
  
  'Dim aelementos As New Variant[]
  Dim aelementos As Variant
  Dim i As Integer  
  
  Dim minnumelementos As Integer
  
  minnumelementos = Min(Param[0].count, Param[1].Count)
  For i = 2 To Param.Max
    Print Param[i].count
    minnumelementos = Min(minnumelementos, Param[i].Count)
  Next
  
  For Each aelementos In Param
    aelementos.Resize(minnumelementos)
  Next
  
  Stop
  
End
 


Si yo no puedo decir:

dim valores as new Variant
 


Ya que los tipos nativos no se pueden instanciar.
¿ Cómo es que esto es valido ?.

dim valores as new Variant][]
 


¿ Por ser un array de un tipo nativo ?

Parece que va un trecho de Variant a Variant[]

Saludos
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
última edición por Shell el Jueves, 07 Marzo 2019, 14:08; editado 1 vez 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Param 
 
Variant[] es una clase, no un tipo nativo.
 




===================
No podemos regresar
 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Param 
 
Algo curioso de Variant es que puede admitir valores de distintos tipos.
Podría contener un array pero no admite los métodos de un array como puede ser la clase Variant[] que contiene un array de valores Variant.

Saludos
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Param 
 
Shell escribió: [Ver mensaje]
Algo curioso de Variant es que puede admitir valores de distintos tipos.
Podría contener un array pero no admite los métodos de un array como puede ser la clase Variant[] que contiene un array de valores Variant.

Saludos


Las variables variant son entradas en una tabla (tabla de símbolos, creo recordar que la llamaban) de nombres de variablest, que a su vez apuntan a algún otro sitio de la memoria donde reside la "verdadera" variable con su tipo y todo. Por eso cuando declaras un variant, lo que haces es añadir una entrada a dicha tabla pero ni reservas espacio en la memoria ni sabes qué propiedades o tipo de valores contendrá hasta que eso se resuelva en tiempo de ejecución.
Son más lentas e imprecisas que las variables normales y su flexibilidad puede dar lugar a errores muy difíciles de depurar.

Sin embargo, un variant[] si es un tipo definido de la clase Array, por lo que todos sus propiedades, métodos y demás, ya existen en tiempo de diseño en cuanto Array, no en cuanto a su contenido que seguirían siendo Variants

Saludos.
 




===================
No podemos regresar
 
última edición por shordi el Viernes, 08 Marzo 2019, 11:46; editado 1 vez 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Param 
 
Seguro que Vuott se anima a crear algún ejemplo de gambas que use punteros y variables tipo variant.
Es muy probable que tampoco le gusta el tipo Variant.  

Por ejemplo:

- Cuando la variable Variant contiene solo un valor.
- Cuando la variable Variant contiene un array

Hay veces que tiramos del tipo Variant y si se puede, afinamos el tipo.
O siempre podemos construir una clase, estructura. Si es que fuera posible.

Saludos
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
última edición por Shell el Viernes, 08 Marzo 2019, 13:50; editado 3 veces 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes ¿ Alguien Ha Probado La Clase Param ? Shell General 4 Viernes, 18 Abril 2014, 13:41 Ver último mensaje
Shell
 

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



  

 

cron