Usted conoce
la clase genérica Dictionary? Si usted no
sabe permítanme presentarles...
La clase Dictionary representa una colección de
claves y valores. Es una
colección de tipo clave / valor
e implementa la interfaz IDictionary que tiene dos colecciones en su
interior una para guardar la clave y otro para guardar el valor.
La sintaxis
es la siguiente:
Dictionary (Of (TKey, TValue))
Está presente en namespace: System.Collections.Generic
En
el assembly: mscorlib.dll
Dónde:
TKey -
representa el tipo de clave en el diccionario.
TValue - representa el tipo de valor en el
diccionario.
La clase genérica Dictionary es una clase que mapea un conjunto
de claves, que pueden ser de cualquier tipo y un conjunto de valores, que
también pueden ser de cualquier tipo, los tipos de clave y de valor no tiene
por qué ser idénticos.
Podemos decir que la colección Dictionary es
un tipo de colección genérica que se crea en el momento de definir la
colección. Es una
colección de tipo clave / valor donde la clave hace el papel de índice
en la colección.
Cada inclusión de un elemento en el diccionario se compone de un valor y
su clave asociada. El retorno de un valor a partir de su clave tiene un buen desempeño
debido a que la clase Dictionary e implementa como un hashtable.
En todos los ejemplos de este artículo se va usar Visual Basic 2012 Ultimate.
A continuación, examinaremos algunas de las propiedades y
características de la clase Dictionary:
Para crear
un objeto de Dictionary debe
definir una clave seguida de un valor. El primero
indica la clave del elemento que debe incluirse, y el segundo representa el
valor que la clave debe tener.
Para incluir elementos en un objeto Dictionary
debe utilizar el método Add.
Veamos a continuación un ejemplo de cómo crear un
objeto Dictionary en Visual Basic 2012 Ultimate:
Private Sub Button1_Click (ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'Declara un nuevo Dictionary de clave tipo string y valores integer
Dim Frutas As New Dictionary (Of String, Integer)
‘Incluye dos claves: naranja y maca
ListBox1.Items.Add ("Incluyendo las claves: naranja (7) y maca (15)")
Frutas.Add ("naranja", 7)
Frutas.Add ("maca", 15)
‘Verifica se una clave ya existe
If Frutas.ContainsKey ("naranja") Then
‘Escribe un valor para la clave
ListBox1.Items.Add ("La clave naranja ya existe")
Dim Valor As Integer = Frutas.Item ("naranja")
ListBox1.Items.Add ("Valor = " & Valor)
End If
‘Verifica se la clave ya existe
If Frutas.ContainsKey ("maca") Then
ListBox1.Items.Add ("La clave maca ya existe")
Dim Valor As Integer = Frutas.Item ("maca")
ListBox1.Items.Add ("Valor = " & Valor)
End If
If Not Frutas.ContainsKey ("pera") Then
ListBox1.Items.Add ("La clave pera NO existe")
End If
End Sub
También puede almacenar el resultado de una verificación usando ContainsKey en una variable booleana y poner a prueba la variable usando los operadores = (igual) y <> (distinto).
Los principales métodos de la clase Dictionary son:
Add Incluye una clave y un valor especificado en el diccionario.
Clear Elimina todas las claves y los valores del diccionario.
ContainsKey Determina si el diccionario contiene una clave especifica.
ContainsValue Determina si el diccionario contiene un valor específico.
Equals Determina si el objeto especificado es igual al objeto actual.
GetEnumerator Devuelve una enumeración que itera el diccionario.
Remove Quita el valor con la clave especificada del diccionario.
TryGetValue Obtiene el valor asociado a la clave especificada.
Las principales propiedades de la clase Dictionary son:
Count Obtiene el número de par clave/valor contenido en un diccionario.
Item Obtiene o establece el valor asociado a una clave específica.
Keys Obtiene una colección que contiene las claves en el diccionario.
Values Obtiene una colección que contiene los valores en el diccionario.
Podemos
mostrar el contenido de un objeto de tipo Dictionary a partir de una lista
de claves de un Dictionary. Cada instancia de Dictionary posee una propiedad Get con un
identificador Keys. Se puede acceder a esta colección y pasarlo al constructor de la lista de claves.
Las claves tienen el mismo tipo del Dictionary de
origen.
Al formulario añadimos un tercer botón y le agregamos el siguiente código:
‘Crea 5 claves y valores en el diccionario
Dim Carros As New Dictionary (Of String, Integer)
Carros.Add ("Nissan", 12)
Carros.Add ("Toyota", 11)
Carros.Add ("Ford", 10)
Carros.Add ("Yaris", -21)
Carros.Add ("Volkswagen", -8)
‘Asigna las clave a una lista de strings
Dim lista As New List (Of String)(Carros.Keys)
‘Recorre la lista
Dim str As String
For Each str In lista
‘Imprime la cadena y también el elemento
ListBox1.Items.Add (str & " - " & carros.Item (str))
Next
End Sub
En el código anterior se crea un objeto Dictionary con claves de
tipo String y valores de tipo entero se utiliza el método Add
para incluir seis claves y valores. Si se incluye una clave que ya existe en el diccionario se produce una
excepción, para evitar esto usted puede comprobar si una clave que ya existe a
través del método ContainsKey.
El siguiente es un ejemplo que utiliza el método ContainsKey para
comprobar si una clave ya existe, diseñar el formulario y al botón añadir el código siguiente:
Private Sub Button1_Click (ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'Declara un nuevo Dictionary de clave tipo string y valores integer
Dim Frutas As New Dictionary (Of String, Integer)
‘Incluye dos claves: naranja y maca
ListBox1.Items.Add ("Incluyendo las claves: naranja (7) y maca (15)")
Frutas.Add ("naranja", 7)
Frutas.Add ("maca", 15)
‘Verifica se una clave ya existe
If Frutas.ContainsKey ("naranja") Then
‘Escribe un valor para la clave
ListBox1.Items.Add ("La clave naranja ya existe")
Dim Valor As Integer = Frutas.Item ("naranja")
ListBox1.Items.Add ("Valor = " & Valor)
End If
‘Verifica se la clave ya existe
If Frutas.ContainsKey ("maca") Then
ListBox1.Items.Add ("La clave maca ya existe")
Dim Valor As Integer = Frutas.Item ("maca")
ListBox1.Items.Add ("Valor = " & Valor)
End If
If Not Frutas.ContainsKey ("pera") Then
ListBox1.Items.Add ("La clave pera NO existe")
End If
End Sub
También puede almacenar el resultado de una verificación usando ContainsKey en una variable booleana y poner a prueba la variable usando los operadores = (igual) y <> (distinto).
Los principales métodos de la clase Dictionary son:
Add Incluye una clave y un valor especificado en el diccionario.
Clear Elimina todas las claves y los valores del diccionario.
ContainsKey Determina si el diccionario contiene una clave especifica.
ContainsValue Determina si el diccionario contiene un valor específico.
Equals Determina si el objeto especificado es igual al objeto actual.
GetEnumerator Devuelve una enumeración que itera el diccionario.
Remove Quita el valor con la clave especificada del diccionario.
TryGetValue Obtiene el valor asociado a la clave especificada.
Las principales propiedades de la clase Dictionary son:
Count Obtiene el número de par clave/valor contenido en un diccionario.
Item Obtiene o establece el valor asociado a una clave específica.
Keys Obtiene una colección que contiene las claves en el diccionario.
Values Obtiene una colección que contiene los valores en el diccionario.
Para recorrer un objeto Dictionary podemos utilizar un bucle For Each y para obtener la clave y el valor de cada elemento del diccionario, creamos una variable KeyValuePair.
A continuación se muestra un ejemplo, añadimos un segundo botón. y añadimos al botón el siguiente código:
Private Sub Button2_Click (ByVal sender As
System.Object, ByVal e As
System.EventArgs) Handles Button2.Click
ListBox1.Items.Clear ()
‘Crea un Dictionary e incluye 8
claves de tipo String
Dim Equipos As New Dictionary (Of
String, Integer)
Equipos. Add ("Crystal", 54)
Equipos.Add ("Universitario", 41)
Equipos.Add ("Alianza", 49)
Equipos.Add ("Cienciano", 50)
Equipos.Add ("Sport Huancayo", 41)
Equipos.Add ("Inti Gas", 48)
Equipos.Add ("Boys", 45)
Equipos.Add ("León de Huánuco", 46)
'Un Loop para recorrer el
diccionario
Dim Par As KeyValuePair
(Of String,
Integer)
For Each Par In Equipos
‘Exhibe la clave y los valores
ListBox1.Items.Add
(Par.Key & "="
& Par.Value)
Next
End Sub
Al formulario añadimos un tercer botón y le agregamos el siguiente código:
Private Sub Button3_Click (ByVal sender As
System.Object, ByVal e As
System.EventArgs) Handles Button3.Click
ListBox1.Items.Clear ()‘Crea 5 claves y valores en el diccionario
Dim Carros As New Dictionary (Of String, Integer)
Carros.Add ("Nissan", 12)
Carros.Add ("Toyota", 11)
Carros.Add ("Ford", 10)
Carros.Add ("Yaris", -21)
Carros.Add ("Volkswagen", -8)
‘Asigna las clave a una lista de strings
Dim lista As New List (Of String)(Carros.Keys)
‘Recorre la lista
Dim str As String
For Each str In lista
‘Imprime la cadena y también el elemento
ListBox1.Items.Add (str & " - " & carros.Item (str))
Next
End Sub
El resultado es el siguiente:
No hay comentarios:
Publicar un comentario