Dedicado a mis proyectos en Gambas ,un lenguaje de programación parecido al Visual Basic + Java pero ampliamente mejorado y...¡¡para gnu/linux!!.La potencia del gnu/linux sumada a la facilidad del Basic



Consultas, Desarrollo de programas y petición de presupuestos:



sábado, 30 de junio de 2012



Para entender lo que comenta la documentacion sobre el método .Sort, para la ordenación de listas de objetos, he hecho este pequeño ejemplo.

El metodo Sort, tiene un evento relacionado ( _compare ) que es el que le va indica que comparar para hacer la ordenación.

Mi ejemplo:
Tenemos una lista compuesta por nombre, apellidos y edades.
Lo que quiero hacer es obtener 3 listas ordenadas por el nombre, por el apellidos y por la edad

Os enseño la salida generada...



He usado clases 4 clases:
La ClassPersona: es la que "madre" de las que heredan las otras. Contiene las propiedades (ademas tiene un método para devolver una cadena de texto con los datos).
Public Function informe() As String

Dim a As String

a = " " & hnombre & " " & hapellidos & " " & Str$(hedad) & "\n"
Return a

End

Y las clases ClassPersonaOrdenApellidos,ClassPersonaOrdenEdad,ClassPersonaOrdenNombre, se diferencian en el metodo _compare que es redefinido segun la forma que queramos ordenar los datos.

Por ejemplo, para ordenar por edad...

Public Function _compare(otro As ClassPersona) As Integer

If Super.apellidos > otro.apellidos Then
Return 1
Else
If Super.apellidos < otro.apellidos Then
Return -1
Else
Return 0
Endif
Endif

End


Ademas he incluido dos metodos "convierte" y "conviertelista" que son los encargados de hacer la conversion de los datos de la clase persona (madre) a la propia clase heredada.

Public Function convierte(persona As ClassPersona) As ClassPersonaOrdenApellidos

Super.apellidos = persona.apellidos
Super.edad = persona.edad
Super.nombre = persona.nombre
Return Me

End

Public Function convierteLista(personaLista As ClassPersona[]) As ClassPersonaOrdenApellidos[]

Dim personaOrdenApellidos As New ClassPersonaOrdenApellidos[]
Dim perstemporal As New ClassPersonaOrdenApellidos("", "", 0)
Dim a As Integer

For a = 0 To personaLista.count - 1
perstemporal = New ClassPersonaOrdenApellidos("", "", 0)
perstemporal.convierte(personaLista[a])
personaOrdenApellidos.Add(perstemporal)
Next

Return personaOrdenApellidos

End

Uso en el Fmain:
'ordeno por edad
ordenadaEdad = ordenadaEdadtemp.convierteLista(lista)

lista = ordenadaEdad.Sort(gb.Ascent)

muestralista("Edad", lista)

Os dejo el código fuente completo de la aplicación. Enlace de descarga

Saludos



Fuente: