Hola, Javier.

No necesariamente. Podrías pasar el criterio en un delegate. Casualmente eso
es lo que hace LINQ, pasando expresiones lambda (que son delegados anónimos
más elegantes, nada más).

Saludos,
--
Martín Salías
www.Salias.com.ar
Agile Alliance Member - Microsoft MVP



On 6/1/07, MYMTEC S.A. - Javier Wamba <[EMAIL PROTECTED]> wrote:

No se puede con la implementacion de IComparable porque tengo que definir
el
ordenamiento en cada objeto y me quitaria la flexibilidad de poder decir
que
campos y que precedencia quiero. Con IComparable debo decirle como se
ordena
en el codigo del compareTo

Espero que se entienda.

Javier

----- Original Message -----
From: "Carlos S. Villalba" <[EMAIL PROTECTED]>
To: <[email protected]>
Sent: Friday, June 01, 2007 12:56 PM
Subject: [puntonet] Pregunta sobre ordenamiento


Es verdad, justamente era lo que iba a recomendar. Me ahorraste usar mis
dedos!!!.

___________________________________________

Sebastian Villalba
Award Support S.R.L.
[EMAIL PROTECTED]
Tel/Fax: 4541-0503 y lineas rotativas
___________________________________________

-----Mensaje original-----
De: [email protected] [mailto:[EMAIL PROTECTED] En nombre de Leonardo
Micheloni
Enviado el: viernes, 01 de junio de 2007 12:54
Para: [email protected]
Asunto: [puntonet] Pregunta sobre ordenamiento

Estás usando .net 2? porque si es así yo usaría una lista genérica y
de un modo muy fácil haría un sort implementarndo IComparable con el
criterio que quiera.

On 6/1/07, Pata del Santo <[EMAIL PROTECTED]> wrote:
>
>
> yo la lista de parámetros la pasaría como un array de string, para no
> estar
> agregando parámetros opcionales en orderList
>
>  ________________________________
>  De: [email protected] [mailto:[EMAIL PROTECTED] En nombre de
MYMTEC
> S.A. - Javier Wamba
> Enviado el: viernes, 01 de junio de 2007 16:08
> Para: [email protected]
> Asunto: [puntonet] Pregunta sobre ordenamiento
>
>
>
>
>
> Buen dia!
>
> Hoy tengo una pregunta con respecto a mi codigo.
>
> El problema que esto intenta resolver es ordenar una lista por
propiedades
> de sus objetos por ejemplo podria tener un objeto:
>
> persona que tiene las propiedades fechaDeNacimiento y provincia( que es
un
> objeto que contiene la propiedad id) entonces podria escribir
>
> funciones.orderList(listaDePersonas,"fechaDeNaciemiento
> DESC","provincia.id ASC")
>
> donde a partir del segundo parametro se define el criterio de
> ordenamiento.
>
> Queria saber si esta bien hecho o hay algo que ya lo hace y de forma
> optimizada.
>
> Y si alguien se pregunta porque lo hice asi: Es una de las tantas de mi
> jefe!
>
> Saludos y gracias,
>
> Javier Wamba
>
>
>
> Imports System
>
> Public Class Funciones
>
> #Region "Ordenamiento"
>
> Private Shared mutexOrden As New Threading.Mutex
>
> Private Shared ordenamientos() As String
>
> Public Shared Sub orderList(ByVal list As List(Of base), ByVal
ParamArray
> orders() As String)
>
> mutexOrden.WaitOne()
>
> Try
>
> ordenamientos = orders
>
> list.Sort(AddressOf order)
>
> mutexOrden.ReleaseMutex()
>
> Catch ex As Exception
>
> mutexOrden.ReleaseMutex()
>
> End Try
>
> End Sub
>
> Private Shared Function devolverPropiedad(ByVal b1 As entidades.base,
> ByVal
> prop() As String, ByVal index As Integer) As Object
>
> Try
>
> If prop.Length - 1 = index Then
>
> Return b1.GetType.GetProperty(prop(index)).GetValue(b1, Nothing)
>
> Else
>
> Return devolverPropiedad(b1.GetType.GetProperty
(prop(index)).GetValue(b1,
> Nothing), prop, index + 1)
>
> End If
>
> Catch ex As Exception
>
> Throw ex
>
> End Try
>
> End Function
>
> Private Shared Function orderAuxiliar(ByVal b1 As entidades.base, ByVal
b2
> As entidades.base, ByVal index As Integer) As Integer
>
> Dim vec() As String
>
> Try
>
> vec = ordenamientos(index).Split(" ")
>
> If vec.Length = 2 Then
>
> Dim compar As Integer = devolverPropiedad(b1, vec(0).Split("."),
> 0).compareto(devolverPropiedad(b2, vec(0).Split("."), 0))
>
> If compar = 0 Then
>
> If ordenamientos.Length - 1 = index Then
>
> Return compar
>
> Else
>
> Return orderAuxiliar(b1, b2, index + 1)
>
> End If
>
> Else
>
> If vec(1).ToUpper = "DESC" Then
>
> Return compar * (-1)
>
> Else
>
> Return compar
>
> End If
>
> End If
>
> ElseIf vec.Length = 1 Then
>
> Dim compar As Integer = devolverPropiedad(b1, vec(0).Split("."),
> 0).compareto(devolverPropiedad(b2, vec(0).Split("."), 0))
>
> If compar = 0 Then
>
> If ordenamientos.Length - 1 = index Then
>
> Return compar
>
> Else
>
> Return orderAuxiliar(b1, b2, index + 1)
>
> End If
>
> Else
>
> Return compar
>
> End If
>
> Else
>
> Throw New Exception("Demasiados espacios")
>
> End If
>
> Catch ex As Exception
>
> Throw ex
>
> End Try
>
> End Function
>
> Private Shared Function order(ByVal b1 As entidades.base, ByVal b2 As
> entidades.base) As Integer
>
> Try
>
> Return orderAuxiliar(b1, b2, 0)
>
> Catch ex As Exception
>
> Throw ex
>
> End Try
>
> End Function
>
> #End Region
>
> End class
>
>
>
> Public Class base
>
> Friend Sub New()
>
> End Sub
>
> End Class




Responder a