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: