Unidad 32. Colecciones en VB (III)





3    Borrado, clear, remove.

Para borrar disponemos de los métodos Clear, Remove, RemoveAt, RemoveRange.

 

Borra el elemento con el índice indicado.

 

 Coleccion.RemoveAt(1)   

 

Borra los elementos que se indican, Cuantos,  desde la posición indicada PosiciónInicial.

 

 Coleccion.RemoveRange(PosiciónInicial, Cuantos)

 

Borra el primer elemento que sea igual al objeto de referencia.

 

 Item.Nombre = "Silla"

 Coleccion.Remove(Item)

 

También podemos borrar todo el contenido de la colección utilizando el método clear.

 

Colección.Clear()

4    Posición de un elemento, indexOf.

Si deseamos saber la posición de un elemento, podemos utilizar el método indexOf.

Este método nos devuelve la posición del elemento en la colección, o el valor -1 si no lo encuentra.

 

La sintaxis es

 

Posicion = Coleccion.IndexOf(Item)

Console.WriteLine(Coleccion.IndexOf(Item))

 

Para la siguiente colección.

 

  Sub Main()

    Console.WriteLine("Carga colección de objetos.")

    Dim Coleccion As New System.Collections.Generic.List(Of Datos)

    Dim Item As New Datos

 

    Item.Nombre = "Silla"

    Coleccion.Add(Item)

 

    Item = New Datos()

    Item.Nombre = "Mesa"

    Coleccion.Add(Item)

 

    Dim x As Integer

    While x < Coleccion.Count

      Console.WriteLine(Coleccion.Item(x).Nombre)

      x = x + 1

    End While

End Sub

 

Un ejemplo :

 

 Item = Coleccion.Item(0)

 Console.WriteLine(Coleccion.IndexOf(Item))

 

 Posicion = Coleccion.IndexOf(Item)

 Console.WriteLine(Posicion)

 

La salida del ejemplo es cero en los dos casos.

Como peculiaridad hay que ver el siguiente ejemplo.

 

  Item = New Datos

  Item.Nombre = "Silla"

  Console.WriteLine(Coleccion.IndexOf(Item))

 

Siendo que el elemento  “Silla” existe en la colección previamente a la declaración del nuevo Item, el resultado de la salida será –1, no encontrado, y es que aunque el valor existe en la colección, el item declarado en si es nuevo, y no está en la misma, aunque su valor sea coincidente, es la única explicación coherente basada en

 

 

 Dim Dato As Datos

  For Each Dato In Coleccion

    Console.WriteLine(Dato.Nombre)

    Console.WriteLine(Dato.Nombre.GetHashCode)

  Next

 

  Item = New Datos

  Item.Nombre = "Silla"

  Console.WriteLine(Item.GetHashCode)

  Console.WriteLine(Coleccion.IndexOf(Item))

 

Y en este otro ejemplo

 

    Console.WriteLine("Antes")

    Dim Dato As Datos

    For Each Dato In Coleccion

      Console.WriteLine("Valor {0} ", Dato.Nombre)

      Console.WriteLine("HashCode {0} ", Dato.Nombre.GetHashCode)

    Next

    Console.WriteLine("Creación de item")

    Item = New Datos

    Item.Nombre = "Silla"

 

    Console.WriteLine("HashCode {0} ", Item.GetHashCode)

    Console.WriteLine("IndexOf {0} ", Coleccion.IndexOf(Item))

    Console.WriteLine("Contains {0} ", Coleccion.Contains(Item))

 

    Console.WriteLine("Despues")

    Console.WriteLine("Adición de item")

    Coleccion.Add(Item)

    Console.WriteLine("HashCode {0} ", Item.GetHashCode)

    Console.WriteLine("IndexOf {0} ", Coleccion.IndexOf(Item))

    Console.WriteLine("Contains {0} ", Coleccion.Contains(Item))

    Console.WriteLine("Bucle")

    For Each Dato In Coleccion

      Console.WriteLine("Valor {0} ", Dato.Nombre)

      Console.WriteLine("HashCode {0} ", Dato.Nombre.GetHashCode)

    Next

    Console.ReadLine()

  End Sub

End Module

 

Si nos fijamos en el hashcode, veremos que cuando está fuera de la colección tiene un valor distinto que cuando está dentro, que además es el mismo que el elemento con el mismo valor.

Ambos ejemplos arrancan con la misma carga de la colección previa.

Si este ejemplo le repetimos con datos de tipos estándar, el ejemplo sin embargo no se cumple, ¿por qué?, porque si yo busco el 2, o la “A” en una colección de enteros o de caracteres,  el dos o está o no, pero porque es el número dos no es un objeto nuevo en una colección que contiene la misma información que otro elemento de la colección.

El dos o la “A”, pertenecen a la colección de los números enteros o de caracteres, ya de antemano, y existen o no en nuestra colección.

Octubre-2010
Pág. 32.3

Atrás  Inicio  Adelante






Página inicial  Cursos Informática Gratuitos

Síguenos en:   Facebook       Sobre aulaClic            Política de Cookies