El objeto de Diccionario – por favor considere

Posted by admin on January 25, 2013

Bueno, voy a admitir que soy un poco fan de la matriz. Es amor o el odio de una matriz. Las personas que no gustan de la matriz a menudo optará por una colección en su lugar. Otras lenguas no proporcionan un objeto genial llamado un diccionario o tabla hash. Esto es como una colección que se comporta como una colección combinada con una matriz con algunos métodos útiles adicionales. VBA no tienen esto, pero VBScript proporciona un objeto de diccionario, lo cual es genial, y podemos hacer uso de este objeto dentro de nuestro entorno VBA. Para crear un objeto de diccionario de hacer lo siguiente:

My_dictionary Dim como objeto

Establecer my_dictionary = CreateObject (“Scripting.Dictionary”)

Voila! Tenemos un diccionario. ¿Qué podemos hacer con él? Podemos añadir elementos, comprobar la existencia de elementos, devolver una matriz de teclas, devolver una matriz de puntos, establecer la forma de un diccionario compara claves y obtener el conteo y así sucesivamente. Un ejemplo:

“En primer lugar crear el objeto Dictionary

My_dictionary Dim como objeto

Establecer my_dictionary = CreateObject (“Scripting.Dictionary”)

“Cuando se agrega un objeto o valor a un diccionario que pone la primera clave y el valor real o segundo objeto. La clave es obligatoria y no se puede agregar elementos sin ella.

my_dictionary.Add “Clave 1”, “Valor 1”

my_dictionary.Add “Clave 2”, “Valor 2”

my_dictionary.Add “Key 3”, “Valor 3”

my_dictionary.Add “Clave 4”, “Valor 4”

Así que ahora hemos añadido cuatro valores al diccionario. Vamos a hacer algunas cosas que no podemos hacer limpia o nada en absoluto, con una colección. Digamos que desea reemplazar “Valor 3” con el nombre “Zebra”. Demasiado fácil!

my_dictionary.Item (“Key 3”) = “Zebra”

No se podía hacer eso con una colección! En una colección en la que tendría que quitar un artículo y agregar otro, perdiendo así la orden o sus artículos. Un diccionario se comporta como una matriz en este aspecto. ¿Qué pasa si no estábamos seguros de que había una clave llamada “3 claves” en el diccionario y quería evitar un error. Una vez más, fácil, sólo tiene que utilizar el método Exists del objeto diccionario:

si my_dictionary.Exists (“Key 3”), entonces

my_dictionary.Item (“Key 3”) = “Zebra”

más

my_dictionary.Add “Key 3”, “Zebra”

final, si

Podríamos querer saber cuántos elementos hay en el diccionario, sólo tiene que utilizar el método de conteo, que es el mismo que el de una colección.

MsgBox my_dictionary.Count

Si desea iterar a través de los elementos de un diccionario, no se puede utilizar un contador de números enteros como si fuera una matriz o una colección, pero se pueden utilizar dos métodos para hacerlo:

“Usted sólo puede agarrar los objetos del diccionario de este modo:

Elementos Dim como variante

= rúbricas my_dictionary.Items

“Iterar a través de la matriz de elementos. Estos elementos pueden ser objetos aswell.

Separate_item Dim como Variant

Para cada separate_item en los puntos

MsgBox separate_item

Siguiente separate_item

“O usted puede extraer las claves e iterar a través de los elementos (que es otra ventaja sobre una colección que no te da sus claves o de hacerle saber lo que son)

Teclas Dim como variante

keys = my_dictionary.Keys

“Iterar a través de la matriz de elementos. Estos elementos pueden ser objetos aswell.

Clave Dim como Variant

Para cada clave de las claves

MsgBox my_dictionary.Item (clave)

Tecla Siguiente

Demasiado fácil! Para eliminar un elemento o todos los elementos que puede utilizar Retire y RemoveAll respectivamente:

my_dictionary.Remove (“Clave 2”)

O

my_dictionary.RemoveAll

Éstos son los fundamentos. Voy a mirar en el método de CompareMode en Un Minuto. El objetivo del diccionario es una gran ventaja cuando se necesita para construir una colección de colecciones o una colección de clases. Por ejemplo, digamos que tuvimos que recopilar datos sobre spys y sus misiones actuales. Por lo general, habría que crear un objeto de clase llamado Spy y mantener una colección privada o pública dentro de la clase a la que nos gustaría añadir a sus misiones. Una clase demasiados (A Collection es una clase)! Vamos a usar un diccionario en vez …

My_dictionary As Object
Dim misiones As Collection
Spy_name dévil como secuencia
Dim llaves, clave según la variante
Establecer my_dictionary = CreateObject (“Scripting.Dictionary”)

‘Añadir tres lotes de espías.

Establecer misiones = Nueva colección

spy_name = “Alexander Poligraphovich”

missions.Add “Vladivostok”

missions.Add “Ucrania”

missions.Add “Beijing”

my_dictionary.Add spy_name, las misiones

spy_name = “Mohammed Ramadan”

Establecer misiones = Nueva colección

missions.Add “Munich”

missions.Add “Teherán”

missions.Add “Sydney”

my_dictionary.Add spy_name, las misiones

spy_name = “Sri FitzPatrick”

Establecer misiones = Nueva colección

missions.Add “Dublín”

missions.Add “San Francisco”

my_dictionary.Add spy_name, las misiones

keys = my_dictionary.Keys

Para cada clave en Keys

MsgBox tecla & vbCrLf & _

my_dictionary (clave). punto (1) & vbCrLf & _

my_dictionary (clave). punto (2) & vbCrLf & _

my_dictionary (clave). elemento (3)

Tecla Siguiente

El método CompareMode le permite establecer cómo el diccionario de la compara con las llaves en la búsqueda de duplicados, etc Hay cuatro modos de comparar vbBinaryCompare, vbTextCompare, vbDatabaseCompare (para MS Access únicamente) y vbUseCompareOption (que utiliza la configuración de la instrucción Option Compare en la parte superior de la un módulo). ¿Cómo podemos usar esto? Digamos que sumar dos valores con las teclas de mono y un mono “en minúsculas y el otro en mayúsculas.

my_dictionary.Add “mono”, “Jirafa”

my_dictionary.Add “mono”, “Elephant”

MsgBox my_dictionary.Count

El MsgBox mostrará un número de elementos de los dos, porque las dos claves son esencialmente diferentes. El diccionario se realiza una comparación binaria sobre las teclas para que pueda agregar más de un ‘mono’, siempre y cuando tengan alguna diferencia en mayúsculas o minúsculas. ¿Y si quisiéramos que el mono palabra en todas sus formas de ser comparado por su nombre y no el contenido? En otras palabras, no queremos más de un ‘mono’ en el diccionario. Usamos CompareMode vbTextCompare:

my_dictionary.CompareMode = vbTextCompare

my_dictionary.Add “mono”, “Jirafa”

my_dictionary.Add “mono”, “Elephant”

MsgBox my_dictionary.Count

En este ejemplo, ni siquiera llegar a la Msgbox, en lugar de eso sale un error que dice “Esta clave ya está asociada con un elemento de esta colección.”. Esto evita que se añaden dos llaves que tienen el mismo nombre. vbBinaryCompare se comporta de la misma manera que el primer ejemplo lo hace (que es el valor predeterminado) y vbDatabaseCompare …. Bueno he leído lo que hizo una vez y nunca tuvo que recordar de nuevo! Usted puede encontrar explicaciones para esto, aunque de manera muy sucinta, dentro de la Ayuda de MS Access, o mejor aún, buscar en Google.

Esperemos que esto le da una herramienta más al lado de la colección o matriz y algunas ideas sobre el uso futuro. Un diccionario hace que la estructura de código más limpio y más humanamente comprensible. Esta herramienta VBScript realmente pagará dividendos.

Categories: Software

Comments are closed.