En aquest post explico com trobar objectes dins d’un array o cadena d’objectes en vb.net
Anem a suposar que tenim un grup d’alumnes que els introduïm en un array o un vector, i ens interessa buscar un alumne en concret d’aquesta llista, una manera de fer-ho seria fent un recorregut per tot el vector fins que trobem l’alumne que busquem, una altra molt més fàcil és utilitzar el mètode “indexOf” de la classe ArrayList, on ens tornarà la posició exacta del l’alumne que estem buscant, d’aquesta manera amb ArrayList i indexOf, trobem objectes dins d’un array a vb.net.
Definició de la classe alumne
Anem a definir la classe alumne amb les seves propietats habituals, nom, cognoms, adreça, etc., dins de la classe sobreescriurem el mètode “Equals” i dins d’aquest mètode retornarem true o false si l’objecte propi de la classe és igual al que rebem del mètode, podent realitzar la comparació amb els camps que ens interessen de la classe alumne, de la següent manera:
Public Class alumne
Inherits persona
Private IDALUMNE As Integer
Public Sub New(ByVal sNom As String, ByVal sIDALUMNE As Integer)
MyBase.New(sNom)
IDALUMNE = sIDALUMNE
End Sub
Public Function getidAlumne() As Integer
Return IDALUMNE
End Function
Overrides Function Equals(ByVal obj2 As Object) As Boolean '
If Not obj2 Is Nothing Then
If Not obj2 Is System.DBNull.Value Then
Dim c As alumne = obj2
If c.getidAlumne = getidAlumne() Then
Return True
End If
End If
End If
Return False
End Function
End Class
Aquest mètode sobreescrit rep com a paràmetre “obj2” de tipus object, aquest objecte amb tota seguretat de tipus alumne és comparat amb els camps de la nostra classe, aquí es pot veure que es compara amb el idAlumne, però es podria utilitzar els altres camps de l’objecte , nom, cognoms, etc, retorna true si és el mateix objecte o false si no ho és.
Aquesta implementació es pot utilitzar com a rutina habitual en la declaració de totes les classes d’identitat del nostre programa, després es pot utilitzar o no si és necessari.
Exemple de ArrayList i indexOf, trobem objectes dins d’un array en vb.net
Anem a veure com podem trobar un alumne dins d’un ArrayList després d’haver sobreescrit el mètode “Equals“:
Dim a As alumne
Dim array As ArrayList = New ArrayList
a = New alumne("Jordi", 12) 'Vamos creando alumnos
array.Add(a) 'añadimos el alumno en el array
a = New alumne("Anna", 24)
array.Add(a)
a = New alumne("Joan", 32)
array.Add(a)
a = New alumne("Carme", 14)
array.Add(a)
a = New alumne("Josep", 31)
array.Add(a)
a = New alumne("Marc", 20)
array.Add(a)
a = New alumne("Mireia", 22)
array.Add(a)
Dim posicio As Integer
posicio = array.IndexOf(New alumne("", 31)) 'Busco el alumno con identificador 31 y me devuelve la posicion 4
posicio = array.IndexOf(New alumne("", 12)) 'Busco el alumno con identificador 12 y me devuelve la posicion 0
En l’exemple hem declarat 7 alumnes i els hem afegit en un array, després busquem en cas de fallida amb el mètode “indexOf“, l’alumne amb identificador 31 i ens retorna la posició 4.
Conclusions
Una manera molt fàcil i ràpida de trobar objectes dins d’un array és sobreescriure el mètode “Equals” dins de la classe, d’aquesta manera trobar objectes coincidents dins d’un array amb gran quantitat de dades es converteix en una tasca molt senzilla.