Ordenar collection

09/10/2006 - 16:35 por Hugo Gsell | Informe spam
Hola.
Tengo una clase que devuelve una coleccion de un tipo especifico.
Algo como...
PUBLIC FUNCTION MiFuncion(Parametro as integer) asd Collection (of
MiClaseDeDatos)
...
End Function

El tema es que quiero ORDENARLO... es decir.. que la coleccion quede
ordenada.
¿Puedo hcerlo?
¿Como?

Hugo A. Gsell

Preguntas similare

Leer las respuestas

#1 floyd303
09/10/2006 - 18:43 | Informe spam
Hola!

Lo puedes hacer de la siguiente manera:

MiClaseDeDatos[] objLista = (New List(of
MiClaseDeDatos)(MiFuncion(Parametro))).ToArray()

MiClaseDeDatos[] objOrdenado = Array.Sort(objLista)

Tienes que implementar el interfaz IComparable a tu clase
MiClaseDeDatos para indicar como debe de ordenarse el array.

public int CompareTo(object obj)
{
throw new NotImplementedException();
}

Tienes mas informacion en el siguiente enlace:

http://msdn2.microsoft.com/en-us/li...areto.aspx

Espero que te ayude

Un saludo
Roberto M. Oliva


Hugo Gsell ha escrito:

Hola.
Tengo una clase que devuelve una coleccion de un tipo especifico.
Algo como...
PUBLIC FUNCTION MiFuncion(Parametro as integer) asd Collection (of
MiClaseDeDatos)
...
End Function

El tema es que quiero ORDENARLO... es decir.. que la coleccion quede
ordenada.
¿Puedo hcerlo?
¿Como?

Hugo A. Gsell
Respuesta Responder a este mensaje
#2 Eduardo A. Morcillo [MVP]
10/10/2006 - 07:23 | Informe spam
¿Por que no usas List(Of ) que incluye metodos para ordenar la lista?

Eduardo A. Morcillo [MVP VB]
Respuesta Responder a este mensaje
#3 Hugo Gsell
10/10/2006 - 12:20 | Informe spam
La verdad es que son una 20 o 30 clases que fueron creadas "para que
devuelvan una colección".
Es decir, ya estan bastante utilizadas.
No se que cambios adicionales tendría que hacer si los comvierto a List
porque como son muchas y utilizadas en diferentes aplicaciones imaginate
aparte de cambiar las clases en si (que creo sería lo de menos) debería
cambiar en todos los lugares que las utilizo al "recorrer" la coleccion con
los valores devueltos.
Como no conozco la implementación de list no se que cambios deberia hacer.

Hugo A. Gsell


"Eduardo A. Morcillo [MVP]" <"emorcillo["@]mvps.org> escribió en el mensaje
news:
¿Por que no usas List(Of ) que incluye metodos para ordenar la lista?

Eduardo A. Morcillo [MVP VB]
Respuesta Responder a este mensaje
#4 floyd303
10/10/2006 - 13:32 | Informe spam
Hola!

Es verdad, la opcion de Eduardo es muy buena. Si utilizas el metodo
Sort de List(of ). Hay una implementacion que es la siguiente:

Public Sub Sort ( _
comparer As IComparer(Of T) _
)

Solo tienes que escribir una clase que implemente el interfaz IComparer
para cada clase, por ejemplo:

Public Class MiClaseDeDatosComparer Implements IComparer(Of
MiClaseDeDatos)

Public Function Compare ( x As MiClaseDeDatos, y As MiClaseDeDatos) As
Integer
' Realizar la comparacion entre x e y, devolviendo lo siguiente:
' Menos que cero si x es menor que y
' Cero si ambos son iguales
' Mas que cero si x es mayor que y
End Function

End Class

Entonces para ordenar una coleccion como la tuya, el codigo seria asi:

Lis(Of MiClaseDeDatos) objLista = New List(of
MiClaseDeDatos)(MiFuncion(Parametro))
objLista.Sort(New MiClaseDeDatosComparer)

Con esto, no te quedaria mas remedio que codificar todas las
implementacion del ICompare, una para cada clase, pero por lo menos no
tienes que tocar el codigo de las clases. Ten en mente que siempre le
tienes que decir al sistema como ordenar una lista de objetos de un
tipo definido por ti: bien por ICompare, bien por IComparable que es el
metodo que te comente en el primer post.

Un saludo
Roberto M. Oliva




Hugo Gsell ha escrito:

La verdad es que son una 20 o 30 clases que fueron creadas "para que
devuelvan una colección".
Es decir, ya estan bastante utilizadas.
No se que cambios adicionales tendría que hacer si los comvierto a List
porque como son muchas y utilizadas en diferentes aplicaciones imaginate
aparte de cambiar las clases en si (que creo sería lo de menos) debería
cambiar en todos los lugares que las utilizo al "recorrer" la coleccion con
los valores devueltos.
Como no conozco la implementación de list no se que cambios deberia hacer.

Hugo A. Gsell


"Eduardo A. Morcillo [MVP]" <"emorcillo["@]mvps.org> escribió en el mensaje
news:
¿Por que no usas List(Of ) que incluye metodos para ordenar la lista?

Eduardo A. Morcillo [MVP VB]
Respuesta Responder a este mensaje
#5 Eduardo A. Morcillo [MVP]
11/10/2006 - 06:35 | Informe spam
Probablemente no tengas que hacer mas cambio que cambiar las
declaraciones de los metodos y variables. Claro que con 20 o 30 clases
que se usan en varias aplicaciones no va a ser un cambio comodo de
hacer. Pero si tienes que ordenar estas colecciones o hacer busquedas el
cambio a List creo que bien vale la pena.

Eduardo A. Morcillo [MVP VB]
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida