Problema de ordenamiento

Iniciado por luis456, 11 Marzo 2015, 14:11 PM

0 Miembros y 1 Visitante están viendo este tema.

luis456

He probado y reprobado ordenar la salida en este codigo de menor a mayor y siempre me da error en ejecucion probando todas las variables y probando en diseño del listbox en false o true y me sigue fallando.

Código (vbnet) [Seleccionar]
Dim Re As New Random
Dim Result22aa55e As IEnumerable(Of Integer) =
             (
                 (Result1.Concat(Result2).Concat(Result3).
           Distinct.
           Select(Function(Value As Integer)
                      Return If(Value < MAX, Value, Rand.Next(0, MAX))
                  End Function))
        )

       Dim selecctedValues23aa As IEnumerable(Of Integer) = Result22aa55e.Take(11)

       '  Array.Sort(selecctedValues23aa)
       ' ListBox3.Sorted = True
       
     Me.ListBox3.Items.AddRange(selecctedValues23aa.Cast(Of Object).ToArray)  


el code funciona bien pero me muestra los numeros desordenados

Luis

Que tu sabiduria no sea motivo de Humillacion para los demas

Eleкtro

Utilizando las extensiones LINQ:
IEnumerable.OrderBy

(Lee el ejemplo en Vb.Net que hay en esa misma página)

Saludos!








luis456

Cita de: Eleкtro en 11 Marzo 2015, 14:29 PM
Utilizando las extensiones LINQ:
IEnumerable.OrderBy

(Lee el ejemplo en Vb.Net que hay en esa misma página)

Saludos!

Te refieres a esta cosa :)

Código (vbnet) [Seleccionar]
Structure Pet
        Public Name As String
        Public Age As Integer
    End Structure

    Sub OrderByEx1()
        ' Create an array of Pet objects.
        Dim pets() As Pet = {New Pet With {.Name = "Barley", .Age = 8}, _
                             New Pet With {.Name = "Boots", .Age = 4}, _
                             New Pet With {.Name = "Whiskers", .Age = 1}}

        ' Order the Pet objects by their Age property.
        Dim query As IEnumerable(Of Pet) = _
            pets.OrderBy(Function(pet) pet.Age)

        Dim output As New System.Text.StringBuilder
        For Each pt As Pet In query
            output.AppendLine(pt.Name & " - " & pt.Age)
        Next

        ' Display the output.
        MsgBox(output.ToString())
    End Sub

    ' This code produces the following output:
    '
    ' Whiskers - 1
    ' Boots - 4
    ' Barley - 8


luis



Que tu sabiduria no sea motivo de Humillacion para los demas

Eleкtro

Cita de: luis456 en 11 Marzo 2015, 14:42 PMTe refieres a esta cosa :)

Si, fíjate bien:
Cita de: MSDN
Código (vbnet,14) [Seleccionar]
Structure Pet
       Public Name As String
       Public Age As Integer
   End Structure

   Sub OrderByEx1()
       ' Create an array of Pet objects.
       Dim pets() As Pet = {New Pet With {.Name = "Barley", .Age = 8}, _
                            New Pet With {.Name = "Boots", .Age = 4}, _
                            New Pet With {.Name = "Whiskers", .Age = 1}}

       ' Order the Pet objects by their Age property.
       Dim query As IEnumerable(Of Pet) = _
           pets.OrderBy(Function(pet) pet.Age)

       Dim output As New System.Text.StringBuilder
       For Each pt As Pet In query
           output.AppendLine(pt.Name & " - " & pt.Age)
       Next

       ' Display the output.
       MsgBox(output.ToString())
   End Sub

   ' This code produces the following output:
   '
   ' Whiskers - 1
   ' Boots - 4
   ' Barley - 8

Lo suyo es que entiendas esa "cosa" a la que te estás refiriendo, o al menos su utilización.

Saludos








luis456

Cita de: Eleкtro en 11 Marzo 2015, 14:44 PM
Si, fíjate bien:
Lo suyo es que entiendas esa "cosa" a la que te estás refiriendo, o al menos su utilización.

Saludos

Jejeje pues npi por ahora y te cuento tendría que hacerlo 20 veces que son las rutinas que tengo en el codigo la que puse arriba, pensaba que con una cosa corta lo podria arreglar jejje

Luis
Que tu sabiduria no sea motivo de Humillacion para los demas

Eleкtro

#5
Cita de: luis456 en 11 Marzo 2015, 15:06 PMpues npi por ahora

Pues lo tienes en bandeja, un ejemplo bien específico de MSN.

¿Qué es lo que no entiendes exactamente?, aunque ya me imagio que será... todo o casi todo...

Estás intentano desarrollar una aplicación que requiere el uso de LINQ, o en su defecto Loops (búcles), entonces practica y aprende lo necesario antes de continuar.

Hace tiempo te mostré una descarga oficial de MSDN que contenia 101 ejemplos de la utilización de LINQ en VB.Net... ahí también tienes ejemplos para ordenar una colección.

...Pero si simplemente los copias sin enterarte de lo que haces, luego estarás en las mismas.

PD: No te desgloso la llamada a .OrderBy en el código citado por que te tendría que explicar sobre expresiones Lambda y eso te confundiría aun más, si lo prefieres puedes intentar algo más básico como un For, o simplemente utiliza el método 'Sort' convirtiendo la secuencia a una Lista (Enumerable.ToList).

Ánimo, ¡es algo fácil!

Saludos!








luis456

Listo ya funciona tarde unos dias porque estaba en otras cosas tenias razón Elektro fue fácil
ya me estoy metiendo de lleno en linq: hasta me parece facil jejejej

Código (vbnet) [Seleccionar]
Dim Re As New Random
        Dim Result22aa55e As IEnumerable(Of Integer) =
              (
                  (Result1.Concat(Result2).Concat(Result3).
            Distinct.
            Select(Function(Value As Integer)
                       Return If(Value < MAX, Value, Rand.Next(25, MAX))
                   End Function))
         )
        Dim selecctedValues23aa As IEnumerable(Of Integer) = Result22aa55e.Take(11)
        Dim liste As List(Of Integer) = selecctedValues23aa.ToList
        liste.Sort()
        ListBox3.Items.AddRange(liste.Cast(Of Object).ToArray) 


Hasta la siguiente pregunta :)

Luis


Que tu sabiduria no sea motivo de Humillacion para los demas

Eleкtro

#7
Pero lo complicas demasiado, en realidad no tiene más misterio que utilizar la clausula 'Order By' ( o la extensión '.OrderBy' ) cómo te sugerí al principio.

Así:
Código (vbnet) [Seleccionar]
Dim selecctedValues23aa As IEnumerable(Of Integer) =
   From value As Integer In Result22aa55e
   Take 11
   Order By value Ascending


O así:
Código (vbnet) [Seleccionar]
Dim selecctedValues23aa As IEnumerable(Of Integer) =
   Result22aa55e.
   Take(11).
   OrderBy(Function(value As Integer)
              Return value
           End Function)


Saludos








luis456

Cita de: Eleкtro en 13 Marzo 2015, 14:53 PM
Pero lo complicas demasiado, en realidad no tiene más misterio que utilizar la clausula 'Order By' ( o la extensión '.OrderBy' ) cómo te sugerí al principio.

Así:
Código (vbnet) [Seleccionar]
Dim selecctedValues23aa As IEnumerable(Of Integer) =
   From value As Integer In Result22aa55e
   Take 11
   Order By value Ascending


O así:
Código (vbnet) [Seleccionar]
Dim selecctedValues23aa As IEnumerable(Of Integer) =
   Result22aa55e.
   Take(11).
   OrderBy(Function(value As Integer)
              Return value
           End Function)


Saludos


Hola
Lo puse a si al principio y me dio error no me acuerdo bien pero algo como " la funcion no devuelve xxxx " no me acuerdo mas y si tuve que modificar algo ya que no me contaba " take"  y lo resolvi de esta forma y ahora va de perlas :)

Código (vbnet) [Seleccionar]
Dim liste As List(Of Integer) = selecctedValues23aa.Take(11).ToList
        liste.Sort()


Luis







Que tu sabiduria no sea motivo de Humillacion para los demas