|
|
|
|
- Acceso a la arrays asociativa
- Acceder a los elementos de la arrays asociativa
- ¿Cómo se puede iniciar una array asociativa tan pronto como se declara?
- Navegar por la arrays asociativa
- Funciones WLanguage y arrays
- Parámetros asociativos de Array
- array asociativa de clases o estructuras
- array asociativa de arrays, cola, pila, lista
Asociativo array (Tipo de Variable)
Un array asociativo es un tipo "avanzado" de array: permite agrupar una serie de elementos del mismo tipo. Cada elemento del array está indexado en cualquier tipo de información (y no solo en un índice numérico, como en otros tipos de arrays). Observación: Este tipo de array le permite acceder rápidamente a cualquier elemento, con algunas opciones en las cuerdas. // Fills an associative array with the sizes of files aaFileSize is associative array of int aaFileSize["File1.txt"] = fSize("File1.txt") aaFileSize["File2.txt"] = fSize("File2.txt") // Retrieves the size of a file Trace(aaFileSize["File2.txt"]) // Iterates over file sizes sFile is string nSize is int FOR EACH ELEMENT nSize,sFile OF aaFileSize Trace(StringBuild("%1: %2", sFile, nSize)) END Sintaxis
Declarando una asociación array Ocultar los detalles
<Array name> is associative array [(<Options> [, <Default value> [, <Key type> [, <Initial size>]]])] of <Type>
<Array name>: Nombre de la array Variable a declarar. <Options>: Combinación de constantes utilizadas para configurar el modo de funcionamiento de la array:
| | WithDuplicates | Esta constante se utiliza para permitir que los duplicados. Por Default, una array asociativa no puede contener ningún duplicado. | ccIgnoreAccent | Si el tipo de clave es una cadena (por Default), la indexación ignora los caracteres acentuados. | ccIgnoreCase | Si el tipo de clave es una cadena (por Default), la indexación no distingue entre mayúsculas y minúsculas. | ccIgnoreSpace | Si el tipo de clave es una cadena (por Default), la indexación ignora los caracteres espaciales. | ccIgnorePunctuationAndSpace | Si el tipo de clave es una cadena (por Default), la indexación no es sensible a la puntuación e ignora los caracteres espaciales. | WithoutDuplicates ( Default ) | Por Default, una array asociativa no puede contener ningún duplicado. Puede dejar esta constante sin especificar. |
El valor "*" permite conservar el valor predeterminado de la opción. <Default value>: Valor devuelto al acceder a un elemento inexistente en una array asociativa sin duplicado. Este parámetro es ignorado en una array asociativa con duplicados. Por defecto, se utiliza el valor predeterminado del tipo de array (0, "", False).El valor "*" permite conservar el valor predeterminado del tipo. <Type of key>: Tipo de clave utilizada para navegar por la array. Por Default, la operación de búsqueda se realiza en una tecla de cadena. Los tipos autorizados son los siguientes:
| | wlString | Cadena de caracteres | wlUnicodeString | Cadena Unicode | wlDate | salir con | wlDateTime | FechaHora | wlInt | Firmado un entero de 4 bytes | wlInt _8 | Firmado un entero de 8 bytes | wlUnsignedInt_4 | Unsigned 4-byte integer | wlUnsignedInt_8 | Un entero de 8 bytes sin firmar | wlTime | momento | wlCurrency | Moneda | wlNumeric | Numeric | wlReal | 8 bytes reales | El valor "*" permite conservar el tipo de clave predeterminada (string). <Initial size>: Integro. Corresponde al tamaño inicial de la zona de memoria para la array asociativa.La adición en una array asociativa puede ser bastante larga si la array se redimensiona. En caso de adiciones múltiples, le recomendamos que sobredimensione el array para optimizar las adiciones. El valor "*" permite conservar el tamaño predeterminado. <Type>: Tipo de elementos que se encuentran en la array.
Declarando un parámetro asociativo de array Ocultar los detalles
<Parameter name> is associative array of <Type>
<Parameter name>: Nombre de la array Variable a declarar. <Type>: Tipo de elementos que se encuentran en la array.
Observaciones Acceso a la arrays asociativa Las siguientes propiedades pueden ser utilizadas para manipular una asociación array: | | Conde | Devuelve el número de ocurrencias en la array. | Vacío | Permite saber si la array está vacía o no. |
Las sintaxis como &Array y Array1 = Array2 no están permitidas. La asociación arrays no permite a los operadores de la reference ni la copia. Acceder a los elementos de la arrays asociativa El acceso a los elementos que se encuentran en una array asociativa difiere dependiendo de si la array asociativa acepta duplicados o no. | | Array asociativo sin duplicados | | Propiedad Exist | Devuelve True si el elemento MyKey existe, o False en el caso contrario. | Propiedad Vacío | Devuelve True si el elemento MyKey no existe, o False en el caso contrario. | Propiedad Conde | MyArray[MyKey]..Occurence Devuelve 1 si el elemento MyKey existe, 0 si el elemento no existe. | Asignación de un elemento | Si el elemento MyKey no existe, se crea un elemento MyKey y se asigna con . Si existe el elemento MyKey, se modifica su valor. | | MyArray[MyKey, Index] = Value Se produce un error de WLanguage si el índice es diferente de 1. Se produce un error de WLanguage si el elemento MyKey no existe.. Si existe el elemento MyKey, se modifica su valor.
Sintaxis compatible con la arrays asociativa con duplicados. | | Crea la entrada en la array asociativa , con el valor Default especificado al declarar la array. | Acceso al elemento | Si el elemento MyKey no existe, devuelve el valor Default del array. Si existe el elemento MyKey, devuelve el valor del elemento. | | Se produce un error de WLanguage si el índice es diferente de 1. Se produce un error de WLanguage si el elemento MyKey no existe.. Si el elemento MyKey existe, devuelve el valor del elemento.
Sintaxis compatible con la arrays asociativa con duplicados. | Address del elemento | Se produce un error de WLanguage si el elemento MyKey no existe.. Si el elemento MyKey existe, devuelve la Address del elemento. | | Se produce un error de WLanguage si el índice es diferente de 1. Se produce un error de WLanguage si el elemento MyKey no existe.. Si el elemento MyKey existe, devuelve la Address del elemento.
Sintaxis compatible con la arrays asociativa con duplicados. |
| | Array asociativo con duplicados | | Propiedad Exist | Devuelve True si existe al menos un elemento MyKey, False si el elemento MyKey no existe. | Verificación de la existencia de una clave: Propiedad Vacío | Devuelve True si el elemento MyKey no existe, False si existe al menos un elemento MyKey. | Número de elementos encontrados en una clave: Propiedad Conde | MyArray[MyKey]..Occurence Devuelve el número de elementos MyKey. | Asignación de un elemento | Crea un elemento MyKey y asigna el valor especificado a este elemento (incluso si los elementos MyKey ya existen). | | MyArray[MyKey, Index] = Value Se produce un error de WLanguage si el índice es mayor que el número de elementos existentes. Se produce un error de WLanguage si el elemento MyKey no existe.. Si el elemento MyKey existe, se modifica el valor del elemento identificado por su índice. | Acceso al elemento | Sintaxis inválida que desencadena un WLanguage Error( porque varios elementos pueden corresponder a la misma clave). | | Se produce un error de WLanguage si el índice es mayor que el número de elementos existentes. Se produce un error de WLanguage si el elemento MyKey no existe.. Si el elemento MyKey existe, devuelve el valor del elemento identificado por su índice. | Address del elemento | Sintaxis no permitida | | Se produce un error de WLanguage si el índice es mayor que el número de elementos existentes. Se produce un error de WLanguage si el elemento MyKey no existe.. Si el elemento MyKey existe, devuelve la Address del elemento identificado por su índice. |
Tiene la posibilidad de utilizar la asignación múltiple para el asociativo arrays. ¿Cómo se puede iniciar una array asociativa tan pronto como se declara? Para inicializar una array asociativa nada más declararla, basta con añadir las parejas "clave/valor" utilizando
el operador [ ] (corchetes). La sintaxis es la siguiente: aaMyArray is associative array of xxx = ... [ [<key1>, <value1>], [<key2>, <value2>], ... ] Por ejemplo: // Stores the VAT rates by name aaVATRate is associative array of real = ... [["Normal", 0.2], ["Intermediate", 0.1], ["Low", 0.055]]
Navegar por la arrays asociativa Funciones WLanguage y arrays Se pueden utilizar varias funciones de WLanguage para manipular la asociativa arrays. Para obtener más información, consulte Funciones de gestión de arrays. Esto permite eliminar un elemento de una array asociativa utilizando suprimir (o ArrayDelete) mediante la siguiente sintaxis: Delete(ArrayName, key) ArrayDelete(ArrayName, Key) Parámetros asociativos de Array - El tipo de los elementos que se encuentran en la array asociativa pasada como parámetro debe ser el mismo que el tipo de la declaración.
- Una array asociativa no puede ser pasada por valor. Una Variable debe pasar necesariamente como parámetro.
Ejemplo:
// Adds a customer into the array PROCÉDURE AddCustomer(aaCustomer is associative array of CCustomer, sName is string, sInfo is string) // Builds the new customer object c is CCustomer(sName, sInfo) // Adds the new object into the array aaCustomer[sName] = c
- No se realiza ninguna verificación durante la compilación: Los controles se realizan en tiempo de ejecución.
- La asociación arrays no permite a los operadores de la reference ni la copia.
array asociativa de clases o estructuras Si se utiliza una array asociativa de clases o estructuras, las diferentes instancias se copian automáticamente durante las adiciones. Si está utilizando un array asociativo de clases dinámicas o estructuras dinámicas , las clases o las estructuras deben asignarse durante la adición (las operaciones de liberación se realizan automáticamente). Ejemplos: // Case of an array of non-dynamic objects // Object clObj is cLMyClass // Associative array of objects aaAssociative is associative array of cLMyClass // Assign one of the object members clObj:nMember = 0 // Add into the associative array. // It is an array of non-dynamic objects, therefore the object is copied // The assignment can be quite "long" if there are a lot of members aaAssociative["Association"] = clObj // Change in the initial object clObj:nMember = 2 // The object was copied, therefore 0 is found in the array // (value during the assignment) Info(aaAssociative["Association"]:nMember)
// Case of an array of dynamic objects // Dynamic object pclObj is dynamic cLMyClass // Associative array of dynamic objects aaAssociative is associative array of dynamic cLMyClass // Allocate a dynamic object pclObj = new cLMyClass // Assign one of the object members pclObj:nMember = 0 // Add into the associative array. // It is an array of dynamic objects. // Therefore, it is a new "pointer" to the same object (fast assignment) aaAssociative["Association"] = pclObj // Change in the initial object pclObj:nMember = 2 // The array contains the same object therefore 2 in the array as well Info(aaAssociative["Association"]:nMember)
El acceso a los miembros de un elemento inexistente en una array asociativa de estructuras o clases no crea automáticamente la instancia de la estructura o clase. La Line del código: MyAssociativeArray["Key"]:Member = 5
falla si no se ha creado previamente el elemento "Clave".
Esta página también está disponible para…
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|