Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: bybaal en 15 Abril 2016, 08:20 am



Título: Ayuda para ordenar Array
Publicado por: bybaal en 15 Abril 2016, 08:20 am
Tengo un Array que en cada uno de sus elementos tiene separados por punto y coma lo que serían los datos de diferentes columnas. por ejemplo:

Código
  1. Dim X() As String = {"052;Juan;Lopez;México", "101;Enrique;Morales;Guatemala", "005;John;McCain;USA", "034;María;Delgado;España"}
  2.  
  3.        'De esta manera me organiza la información por el primer Campo (Los números).
  4.        Array.Sort(X)
  5.  
  6.        'Deseo Organizar por otros campos que no sea el primero.
  7.        '¿...?
  8.  


Título: Re: Ayuda para ordenar Array
Publicado por: Eleкtro en 15 Abril 2016, 08:55 am
Simplemente haz un ordenamiento basado en el índice de elementos obtenidos partiendo cada elemento por el caracter delimitador ";", una forma de aplicar de manera simplificada lo que acabo de mencionar sería usando LINQ:

Código
  1. Dim items As String() = {
  2.    "052;Juan;Lopez;México",
  3.    "101;Enrique;Morales;Guatemala",
  4.    "005;John;McCain;USA",
  5.    "034;María;Delgado;España"
  6. }
  7.  
  8. Dim sorted As IEnumerable(Of String) =
  9.    From item As String In items
  10.    Order By item.Split(";"c)(0)
  11.  
  12. For Each item As String In sorted
  13.    Console.WriteLine(item)
  14. Next



Pero, la solución más apropiada sería que no uses un Array, sino una colección de un tipo personalizado donde encapsular la información de manera "individual" u organizada, como por ejemplo...:

Código
  1. <Serializable>
  2. Public NotInheritable Class Person
  3.  
  4.    Public ReadOnly Property Index As String
  5.    Public ReadOnly Property Name As String
  6.    Public ReadOnly Property Surname As String
  7.    Public ReadOnly Property Country As String
  8.  
  9.    <DebuggerNonUserCode>
  10.    Private Sub New()
  11.    End Sub
  12.  
  13.    <DebuggerStepThrough>
  14.    Public Sub New(ByVal index As String,
  15.                   ByVal name As String,
  16.                   ByVal surname As String,
  17.                   ByVal country As String)
  18.  
  19.        Me.Index = index
  20.        Me.Name = name
  21.        Me.Surname = surname
  22.        Me.Country = country
  23.  
  24.    End Sub
  25.  
  26. End Class

Código
  1. Dim persons As New List(Of Person)
  2. persons.Add(New Person("052", "Juan", "Lopez", "México"))
  3. ...

Y entonces, para ordenar ascendentemente puedes specificar la propiedad que desees:
Código
  1. Dim sorted As List(Of Person) =
  2.    persons.OrderBy(Function(p As Person) p.Country).ToList()

Saludos.


Título: Re: Ayuda para ordenar Array
Publicado por: bybaal en 15 Abril 2016, 12:37 pm
gracias por los aportes, los voy a probar y después les cuento.