|
Página 1 de 2
|
Autor |
Mensaje |
Shell
Analista Programador
Registrado: Marzo 2010
Mensajes: 5278
Edad: 53 Ubicación: Al otro lado de la pantalla
|
Mayor De Un Array
Hola!.
¿ No hay una propiedad o método en los arrays de gambas que diga cual es el mayor ?.
Entonces hay que usar código para hacerlo, supongo....
También se podría clasificar el array y tendríamos el ultimo elemento como el mayor.
Saludos
=================== Gambas Básico
"No es un bug, es una característica no documentada"
última edición por Shell el Domingo, 21 Septiembre 2014, 10:27; editado 2 veces
|
#1 Domingo, 21 Septiembre 2014, 10:24 |
|
|
Shell
Analista Programador
Registrado: Marzo 2010
Mensajes: 5278
Edad: 53 Ubicación: Al otro lado de la pantalla
|
Re: Mayor De Un Array
Pues ya puesto, me gustaría saber cual tarda mas de los métodos de búsqueda del mayor, (creo que tardan igual).
Viéndolo con la herramienta perfilado.
Este es el ejemplo de código.
Tenemos una función para llenar la lista y dos funciones que hacen lo mismo.
Una con menos código que la otra.
El tiempo "total" con el primer método, después de varios intentos es de: 3,6 uS
El tiempo "total" con el segundo método, después de varios intentos es de: 2,8 uS
Si la lista fuera mas grande, supongamos 10000 elementos:
El tiempo total con el primer método sobre los 35uS
El tiempo total con el segundo método sobre los 26uS
Mas o menos se corresponde 10/1
Reflexionar sobre los métodos usados.
Saludos
=================== Gambas Básico
"No es un bug, es una característica no documentada"
última edición por Shell el Domingo, 21 Septiembre 2014, 11:32; editado 1 vez
|
#2 Domingo, 21 Septiembre 2014, 11:29 |
|
|
Shell
Analista Programador
Registrado: Marzo 2010
Mensajes: 5278
Edad: 53 Ubicación: Al otro lado de la pantalla
|
Re: Mayor De Un Array
Si añado un bucle For Each:
El tiempo es similar al del For, con un código más claro.
Saludos
=================== Gambas Básico
"No es un bug, es una característica no documentada"
|
#3 Domingo, 21 Septiembre 2014, 11:36 |
|
|
jguardon
Administrador
Registrado: Septiembre 2009
Mensajes: 2708
Edad: 57 Ubicación: Granada
|
Re: Mayor De Un Array
Te recuerdo que los arrays pueden ser de distintos tipos, por lo que no creo que tenga mucho sentido tener un método que devuelve el mayor de los enteros, si el array es de tipo string, boolean, object o cualquier otro.
Lo que has hecho es lo correcto, bajo mi punto de vista. Aunque también puedes crear una clase heredada de Integer[] que implemente el método .Mayor() que devuelve el entero más grande dentro del array.
Saludos
=================== Jesús Guardón
Por favor, usemos el corrector ortográfico antes de pulsar el botón "Enviar".
"uo ǝs ʇɐu pıɟıɔıן ɐdɹǝupǝɹ ɐ dɹoƃɹɐɯɐɹ, soןo ɥɐʎ bnǝ dɹodouǝɹsǝןo"
|
#4 Domingo, 21 Septiembre 2014, 12:33 |
|
|
Shell
Analista Programador
Registrado: Marzo 2010
Mensajes: 5278
Edad: 53 Ubicación: Al otro lado de la pantalla
|
Re: Mayor De Un Array
Jesús:
Entonces debo usar Variant[]. Intento no usarlo mucho.
Curioso, nunca se me había ocurrido heredar de un tipo nativo de datos como tu dices. Es perfectamente valido.
Es una manera de ampliar los métodos de un tipo. Mejor que tocar el código interno de gambas, que eso si tiene que ser complicado.
( Tampoco necesario )
Saludos
=================== Gambas Básico
"No es un bug, es una característica no documentada"
|
#5 Domingo, 21 Septiembre 2014, 13:20 |
|
|
vuott
Analista Programador
Registrado: Agosto 2013
Mensajes: 2086
Edad: 60 Ubicación:
|
Re: Mayor De Un Array
¿ No hay una propiedad o método en los arrays de gambas que diga cual es el mayor ?.
Hola Shell,
no hay un método directo, pero tu puedes usar el método " .Sort()" .
Por ejemplo:
Public Sub Main()
Dim bb As Byte[] = [90, 3, 50, 24, 200, 145, 0] ' El nuestro array
' Reorganiza los valores en orden descendiente:
bb.Sort(gb.Descent)
' El primero elemento ahora tiene el valor major:
Print bb[0]
' ...o mas brevemente:
Print bb.Sort(gb.Descent)[0]
End
última edición por vuott el Domingo, 21 Septiembre 2014, 15:37; editado 2 veces
|
#6 Domingo, 21 Septiembre 2014, 14:00 |
|
|
jguardon
Administrador
Registrado: Septiembre 2009
Mensajes: 2708
Edad: 57 Ubicación: Granada
|
Re: Mayor De Un Array
Otro ejemplo heredando de la clase nativa:
Código de prueba:
Public Sub Form_Open()
Dim test As New HInteger
test.Add(86)
test.Add(16)
test.Add(212)
test.Add(1)
test.Add(43)
test.Add(18)
Print test.Mayor()
End
El único inconveniente es que no puedes usar la asignación directa de un array a su instancia, porque gambas indica que no es del mismo tipo:
test = [86, 16, 212, 1, 43, 18]
Supongo que habrá alguna manera de de rodear ese problema, pero ahora mismo no lo sé.
Saludos
=================== Jesús Guardón
Por favor, usemos el corrector ortográfico antes de pulsar el botón "Enviar".
"uo ǝs ʇɐu pıɟıɔıן ɐdɹǝupǝɹ ɐ dɹoƃɹɐɯɐɹ, soןo ɥɐʎ bnǝ dɹodouǝɹsǝןo"
|
#7 Domingo, 21 Septiembre 2014, 14:35 |
|
|
Shell
Analista Programador
Registrado: Marzo 2010
Mensajes: 5278
Edad: 53 Ubicación: Al otro lado de la pantalla
|
Re: Mayor De Un Array
Vuott:
Que rara queda la expresión: (El orden que hace para realizar la operación)
..
Print bb.Sort(gb.Descent)[0]
Jesús:
Pues, si que es raro que no se pueda hacer directamente, da errores de distinta maneras.
Ya tenemos una buena pregunta para el foro internacional.
Saludos
=================== Gambas Básico
"No es un bug, es una característica no documentada"
|
#8 Domingo, 21 Septiembre 2014, 19:14 |
|
|
jsbsan
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4175
Edad: 51 Ubicación: dos hermanas, sevilla
|
Re: Mayor De Un Array
Shell:
Citar: Ya tenemos una buena pregunta para el foro internaciona
Lo acabo de preguntar, a ver que nos cuenta Benoit
Saludos
|
#9 Lunes, 22 Septiembre 2014, 09:09 |
|
|
jsbsan
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4175
Edad: 51 Ubicación: dos hermanas, sevilla
|
Re: Mayor De Un Array
Ya me han contestado:
http://sourceforge.net/p/gambas/mailman/message/32855177/
Citar:
test = [86, 16, 212, 1, 43, 18]
Mas o menos me vienen a decir que hay que:
-crear un método que acepte integer[] como parametro y asignarlo a la nueva clase (como se ha hecho usando .add() )
- usar el evento _call para hacer la asignación como si fuera una función (esto no lo he conseguido hacer)
Osea, que no se puede usar la forma de asignación directa.
Saludos
|
#10 Lunes, 22 Septiembre 2014, 19:10 |
|
|
|
Temas parecidos
Temas parecidos
|
Página 1 de 2
|
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
|
|
|
|
|