Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: luis456 en 11 Marzo 2015, 14:11 pm



Título: Problema de ordenamiento
Publicado por: luis456 en 11 Marzo 2015, 14:11 pm
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
  1. Dim Re As New Random
  2. Dim Result22aa55e As IEnumerable(Of Integer) =
  3.              (
  4.                  (Result1.Concat(Result2).Concat(Result3).
  5.            Distinct.
  6.            Select(Function(Value As Integer)
  7.                       Return If(Value < MAX, Value, Rand.Next(0, MAX))
  8.                   End Function))
  9.         )
  10.  
  11.        Dim selecctedValues23aa As IEnumerable(Of Integer) = Result22aa55e.Take(11)
  12.  
  13.        '  Array.Sort(selecctedValues23aa)
  14.        ' ListBox3.Sorted = True
  15.  
  16.      Me.ListBox3.Items.AddRange(selecctedValues23aa.Cast(Of Object).ToArray)  

el code funciona bien pero me muestra los numeros desordenados

Luis



Título: Re: Problema de ordenamiento
Publicado por: Eleкtro en 11 Marzo 2015, 14:29 pm
Utilizando las extensiones LINQ:
IEnumerable.OrderBy (https://msdn.microsoft.com/en-us/library/vstudio/bb534966%28v=vs.100%29.aspx?cs-save-lang=1&cs-lang=vb#code-snippet-1)

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

Saludos!


Título: Re: Problema de ordenamiento
Publicado por: luis456 en 11 Marzo 2015, 14:42 pm
Utilizando las extensiones LINQ:
IEnumerable.OrderBy (https://msdn.microsoft.com/en-us/library/vstudio/bb534966%28v=vs.100%29.aspx?cs-save-lang=1&cs-lang=vb#code-snippet-1)

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

Saludos!

Te refieres a esta cosa :)

Código
  1. Structure Pet
  2.        Public Name As String
  3.        Public Age As Integer
  4.    End Structure
  5.  
  6.    Sub OrderByEx1()
  7.        ' Create an array of Pet objects.
  8.        Dim pets() As Pet = {New Pet With {.Name = "Barley", .Age = 8}, _
  9.                             New Pet With {.Name = "Boots", .Age = 4}, _
  10.                             New Pet With {.Name = "Whiskers", .Age = 1}}
  11.  
  12.        ' Order the Pet objects by their Age property.
  13.        Dim query As IEnumerable(Of Pet) = _
  14.            pets.OrderBy(Function(pet) pet.Age)
  15.  
  16.        Dim output As New System.Text.StringBuilder
  17.        For Each pt As Pet In query
  18.            output.AppendLine(pt.Name & " - " & pt.Age)
  19.        Next
  20.  
  21.        ' Display the output.
  22.        MsgBox(output.ToString())
  23.    End Sub
  24.  
  25.    ' This code produces the following output:
  26.    '
  27.    ' Whiskers - 1
  28.    ' Boots - 4
  29.    ' Barley - 8

luis





Título: Re: Problema de ordenamiento
Publicado por: Eleкtro en 11 Marzo 2015, 14:44 pm
Te refieres a esta cosa :)

Si, fíjate bien:
Cita de: MSDN
Código
  1. Structure Pet
  2.        Public Name As String
  3.        Public Age As Integer
  4.    End Structure
  5.  
  6.    Sub OrderByEx1()
  7.        ' Create an array of Pet objects.
  8.        Dim pets() As Pet = {New Pet With {.Name = "Barley", .Age = 8}, _
  9.                             New Pet With {.Name = "Boots", .Age = 4}, _
  10.                             New Pet With {.Name = "Whiskers", .Age = 1}}
  11.  
  12.        ' Order the Pet objects by their Age property.
  13.        Dim query As IEnumerable(Of Pet) = _
  14.            pets.OrderBy(Function(pet) pet.Age)
  15.  
  16.        Dim output As New System.Text.StringBuilder
  17.        For Each pt As Pet In query
  18.            output.AppendLine(pt.Name & " - " & pt.Age)
  19.        Next
  20.  
  21.        ' Display the output.
  22.        MsgBox(output.ToString())
  23.    End Sub
  24.  
  25.    ' This code produces the following output:
  26.    '
  27.    ' Whiskers - 1
  28.    ' Boots - 4
  29.    ' Barley - 8

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

Saludos


Título: Re: Problema de ordenamiento
Publicado por: luis456 en 11 Marzo 2015, 15:06 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


Título: Re: Problema de ordenamiento
Publicado por: Eleкtro en 11 Marzo 2015, 15:16 pm
pues 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!


Título: Re: Problema de ordenamiento
Publicado por: luis456 en 13 Marzo 2015, 10:13 am
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
  1. Dim Re As New Random
  2.        Dim Result22aa55e As IEnumerable(Of Integer) =
  3.              (
  4.                  (Result1.Concat(Result2).Concat(Result3).
  5.            Distinct.
  6.            Select(Function(Value As Integer)
  7.                       Return If(Value < MAX, Value, Rand.Next(25, MAX))
  8.                   End Function))
  9.         )
  10.        Dim selecctedValues23aa As IEnumerable(Of Integer) = Result22aa55e.Take(11)
  11.        Dim liste As List(Of Integer) = selecctedValues23aa.ToList
  12.        liste.Sort()
  13.        ListBox3.Items.AddRange(liste.Cast(Of Object).ToArray)  

Hasta la siguiente pregunta :)

Luis




Título: Re: Problema de ordenamiento
Publicado por: 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
  1. Dim selecctedValues23aa As IEnumerable(Of Integer) =
  2.    From value As Integer In Result22aa55e
  3.    Take 11
  4.    Order By value Ascending

O así:
Código
  1. Dim selecctedValues23aa As IEnumerable(Of Integer) =
  2.    Result22aa55e.
  3.    Take(11).
  4.    OrderBy(Function(value As Integer)
  5.               Return value
  6.            End Function)

Saludos


Título: Re: Problema de ordenamiento
Publicado por: luis456 en 13 Marzo 2015, 15:14 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
  1. Dim selecctedValues23aa As IEnumerable(Of Integer) =
  2.    From value As Integer In Result22aa55e
  3.    Take 11
  4.    Order By value Ascending

O así:
Código
  1. Dim selecctedValues23aa As IEnumerable(Of Integer) =
  2.    Result22aa55e.
  3.    Take(11).
  4.    OrderBy(Function(value As Integer)
  5.               Return value
  6.            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
  1. Dim liste As List(Of Integer) = selecctedValues23aa.Take(11).ToList
  2.        liste.Sort()

Luis