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.

1 2 ...
Author: Álvaro Sebastian
0 downloads 0 Views

1

2 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))

3 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))

4 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.

5 Inserción, insert, insertRange. Inserta el elemento especificado en la posición indicada. Item.Nombre = "Tres" Item.Longitud = 3 Coleccion.Insert(2, Item) En el ejemplo se inserta el item indicado en la colección en la posición dos, la posición ha de existir en la colección, y su contenido se sustituye por el nuevo. Valor inicial de la colección Valor final de la colección después de la inserción. 1 Uno 2 Dos 2 Tres El valor de la segunda posición se sustituye por el nuevo valor. El método insertRange inserta los elementos indicados a partir de la posición indicada.

6 Dim Otra As New System.Collections.Generic.List(Of Datos) Item = New Datos() Item.Nombre = "Tres" Item.Longitud = 21 Otra.Add(Item) Item = New Datos() Item.Nombre = "Cuatro" Item.Longitud = 42 Otra.Add(Item) Coleccion.InsertRange(2, Otra) Valor inicial de la colección Valor final de la colección después de la inserción. 1 Uno 2 Dos 3 Tres 4 Cuatro

7 Copiado de la colección, CopyTo, ToArray. El método CopyTo nos permite obtener un array del contenido de la colección. El método ToArray también, cambia la sintaxis, por ser una función. La sintaxis para la declaración del vector V, puede ser así: Dim V(Coleccion.Count - 1) As Datos es Coleccion.CopyTo(V) V = Coleccion.ToArray() La utilización puede ser: Dim V(Coleccion.Count - 1) As Datos Coleccion.CopyTo(V) For Each Dato In V Console.WriteLine("Valor {0} ", Dato.Nombre) Console.WriteLine("HashCode {0} ", Dato.Nombre.GetHashCode) Next Dim V(Coleccion.Count - 1) As Datos

8 Clone. Realiza una copia superficial de una colección, sólo copia los elementos de dicha colección, tanto si son tipos de referencia como si son tipos de valor, pero no copia los objetos a los que hacen referencia las referencias. Las referencias de la nueva colección apuntan a los mismos objetos que las referencias de la colección original. La sintaxis para utilizar el método Clone es: Otra = CType(Coleccion.Clone(), SortedList) Ctype es para permitir el cambio de una colección a otra. Y la clonación se realiza en realidad así: Coleccion.Clone()

9 Un ejemplo completo para el uso de Clone. Dim Coleccion As New System.Collections.SortedList Dim Otra As New System.Collections.SortedList Coleccion.Add(1, "Silla") Coleccion.Add(2, "Mesa") Coleccion.Add(3, "Puerta") For x = 0 To Coleccion.Count - 1 Console.WriteLine(" Clave {0} Valor {1} ", _ Coleccion.GetKey(x), Coleccion.GetByIndex(x)) Next Otra = CType(Coleccion.Clone(), SortedList) For x = 0 To Otra.Count - 1 Console.WriteLine(" Clave {0} Valor {1} ", Otra.GetKey(x), Otra.GetByIndex(x)) Next

10 Comparar, Contains, ContainsKey, ContainsValue. Podemos comprobar si determinada información existe o no en una colección. El método que lo realiza es contains, que devuelve true o false. La sintaxis del mismo es Colección.Contains(Item)) Siendo Item Item = New Datos Item.Nombre = "Silla" Y su utilización por ejemplo: Console.WriteLine("Contains {0} ", Coleccion.Contains(Item)) Donde “Silla” es el dato que deseamos comprobar, pero recordemos que no buscamos “Silla”, si no un elemento en esa colección, que está representado por Item, y que es este caso contiene “Silla” En las colecciones en las que se dispone de clave y valor el uso es el que sigue. Console.Write Line(Coleccion. ContainsValue( "Silla")) Console. WriteLine(Colección.ContainsKey( "2"))

11

12

13

14