Ayuda para ordenar Array

Iniciado por bybaal, 15 Abril 2016, 08:20 AM

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

bybaal

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 (vbnet) [Seleccionar]

Dim X() As String = {"052;Juan;Lopez;México", "101;Enrique;Morales;Guatemala", "005;John;McCain;USA", "034;María;Delgado;España"}

        'De esta manera me organiza la información por el primer Campo (Los números).
        Array.Sort(X)

        'Deseo Organizar por otros campos que no sea el primero.
        '¿...?

Eleкtro

#1
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 (vbnet) [Seleccionar]
Dim items As String() = {
   "052;Juan;Lopez;México",
   "101;Enrique;Morales;Guatemala",
   "005;John;McCain;USA",
   "034;María;Delgado;España"
}

Dim sorted As IEnumerable(Of String) =
   From item As String In items
   Order By item.Split(";"c)(0)

For Each item As String In sorted
   Console.WriteLine(item)
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 (vbnet) [Seleccionar]
<Serializable>
Public NotInheritable Class Person

   Public ReadOnly Property Index As String
   Public ReadOnly Property Name As String
   Public ReadOnly Property Surname As String
   Public ReadOnly Property Country As String

   <DebuggerNonUserCode>
   Private Sub New()
   End Sub

   <DebuggerStepThrough>
   Public Sub New(ByVal index As String,
                  ByVal name As String,
                  ByVal surname As String,
                  ByVal country As String)

       Me.Index = index
       Me.Name = name
       Me.Surname = surname
       Me.Country = country

   End Sub

End Class


Código (vbnet) [Seleccionar]
Dim persons As New List(Of Person)
persons.Add(New Person("052", "Juan", "Lopez", "México"))
...


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


Saludos.








bybaal

gracias por los aportes, los voy a probar y después les cuento.