Saltar al contenido

Funciones de Diccionario y Matriz

Introducción

Las funciones de diccionario y matriz proporcionan estructuras de almacenamiento para información en secuencias de comandos. Consulte Funciones relacionadas en el panel lateral para funciones adicionales que se pueden usar con matrices.

Diferencia Entre Matrices y Diccionarios

Aunque son muy similares en muchos aspectos como método para almacenar información, las matrices y los diccionarios difieren en estas importantes características:

  • Matrices
    • Los elementos están ordenados
    • Los elementos se recuperan por posición
  • Diccionarios
    • Los elementos se almacenan sin tener en cuenta el orden y no tienen ningún orden intrínseco.
    • Los elementos se recuperan mediante una clave.

La sintaxis para configurar y recuperar un elemento es similar (ambos pueden usar la notación entre corchetes), pero las matrices no tienen claves asociadas con los elementos y deben almacenar todos los elementos secuencialmente, sin espacios. Los diccionarios pueden ser escasos y las claves se completan sólo cuando es necesario.

Cuál usar depende de la naturaleza de la información. Los diccionarios se prestan a información que varía en la forma en que se recupera. Las matrices suelen ser mejores para conjuntos ordenados.

Configuración y Recuperación de Valores en Matrices y Diccionarios

// Example of an array
$org.lookup.currency = Array();
$org.lookup.currency[1]="USD";
$org.lookup.currency[2]="EUR";

// currency will be "USD"
currency = $org.lookup.currency[1];

// Example of a dictionary
$common.dictionary.message = Dict();
AddToDict($common.dictionary.message, 'OP_START', 'Start');
AddToDict($common.dictionary.message, 'OP_END', 'End');
AddToDict($common.dictionary.message, 'API_PARMS', 'API Parameters');

// message will be "API Parameters"
message = $common.dictionary.message['API_PARMS'];

Encontrar Valores en Diccionarios y Matrices

Para los diccionarios, el HasKey la función le permite probar si hay una clave presente. Para una matriz, puedes usar el FindValue funcione de manera similar pasando dos instancias de la matriz a la función:

arr = {1, 2, 3};
value = 1;
t = (FindValue(value, arr, arr) == value);
// t will be 1 (true)

value = 4;
t = (FindValue(value, arr, arr) == value);
// t will be 0 (false)

AddToDict

Declaración

bool AddToDict(dictionary dict, string key, type arg)

Sintaxis

AddToDict(<dict>, <key>, <arg>)

Parámetros Requeridos

  • dict: Un diccionario existente
  • key: Clave a utilizar en el diccionario
  • arg: Valor a colocar en esa clave

Descripción

Agrega un valor a un diccionario para una clave específica.

La clave debe ser una cadena o tener una representación de cadena, no se permiten claves nulas. Se permite cualquier valor, incluso valores nulos.

Devoluciones true si el valor se agregó y la nueva clave se agregó al diccionario o false si la clave ya existía y el valor de esa clave se actualizó. Si el primer argumento no está definido o no es un diccionario, se inicializará en un diccionario vacío antes de agregar el valor.

Ver también el Dict() función.

Ejemplos

// Initialize a dictionary prior to use
d = Dict();


// Adds a value to a dictionary "d" if a key doesn't already exist
If(!HasKey(d, "key"), AddToDict(d, "key", "value"));

// To directly assign a key-value, use this syntax:
d["key"] = "value";

`WARNING: Use of a null key will cause an error and stop the execution of an operation.

Array

Declaración

array Array()

Sintaxis

Array()

Descripción

Crea una matriz vacía. Aunque no es necesario inicializar las matrices antes de su uso, este método se puede utilizar para ser explícito o para restablecer una matriz ya existente. Las matrices tienen base cero y los valores se recuperan mediante índices.

Ejemplos

// Create an empty array and set values
arr = Array();
arr[0] = "value1";
arr[1] = "value2";

// Create an array and set the first value directly:
arr2[0] = "value";

// Arrays can be created with { } syntax:
arr3 = {};

Collection

Declaración

array Collection()

Sintaxis

Collection()

Descripción

Un alias para Array. Ver la función Array.

CollectValues

Declaración

array CollectValues(dictionary dict, array names)

Sintaxis

CollectValues(<dict>, <names>)

Parámetros Requeridos

  • dict: Un diccionario existente
  • names: Una serie de claves que se buscarán en el diccionario.

Descripción

Devuelve una matriz que contiene los valores correspondientes a los nombres en la matriz de argumentos, devueltos en el mismo orden que las claves de la matriz.

Ejemplos

// Retrieve a map from a source instance
map = GetSourceInstanceMap([Values$Value.]);
names = Array();
names[0] = "Attr1";
names[1] = "Attr2";
// Array containing the values of
// the attributes named in the names array
values = CollectValues(map, names);

Dict

Declaración

dictionary Dict()

Sintaxis

Dict()

Descripción

Crea un diccionario vacío. Un diccionario es una colección de pares nombre-valor donde el valor se recupera en función de un valor clave de cadena. Se permite cualquier valor, incluso valores nulos. La clave debe ser una cadena o tener una representación de cadena. No se permiten claves nulas. Ver también el AddToDict() función.

Advertencia

Los diccionarios deben inicializarse antes de usarse.

Advertencia

El uso de una clave nula provocará un error y detendrá la ejecución de una operación.

Ejemplos

// Creating a dictionary "myDictionary"
myDictionary = Dict();

// Assigning a value ("text") to the key "myKey"
myDictionary["myKey"] = "text";
// Using the AddToDict function instead
AddToDict(myDictionary, "myKey", "text");

GetKeys

Declaración

array GetKeys(dictionary dict)

Sintaxis

GetKeys(<dict>)

Parámetros Requeridos

  • dict: Un diccionario existente

Descripción

Devuelve una matriz de claves en un diccionario. El argumento debe ser un diccionario existente.

Ejemplos

// Retrieving the keys from the dictionary "myDictionary"
// using GetKeys and then looping through the array
// to retrieve all the values in the dictionary
// and writing them to the Operation Log
keys = GetKeys(myDictionary);
i=0;
While(i < Length(keys),
 WriteToOperationLog(myDictionary[keys[i]]);
 i++;
);

GetSourceAttrNames

Declaración

array GetSourceAttrNames(node n)

Sintaxis

GetSourceAttrNames(<n>)

Parámetros Requeridos

  • n: Una expresión de ruta de referencia de cadena a un nodo en la transformación actual

Descripción

Devuelve una matriz que contiene los nombres de los atributos de un nodo, en el orden en que aparecen los atributos en el nodo.

Comparar con la función GetSourceInstanceMap que devuelve un mapa de las claves (los atributos) y los valores de un nodo.

Para ingresar un n ruta en la función, haga doble clic en la carpeta del nodo XML deseada para insertar su ruta calificada en la ubicación del cursor. Para obtener más información, consulte las instrucciones sobre insertar rutas de nodo XML.

Ejemplos

// Appends all the attributes together without having
// to explicitly reference their source data elements
map = GetSourceInstanceMap([Values$Value.]);
names = GetSourceAttrNames([Values$Value.]);
i = 0;
n = Length(names);
str = "";

While(i < n,
  str = str + map[names[i]];
  i++;
);

GetSourceElementNames

Declaración

array GetSourceElementNames(node n)

Sintaxis

GetSourceElementNames(<n>)

Parámetros Requeridos

  • n: Una expresión de ruta de referencia de cadena a un nodo en la transformación actual

Descripción

Devuelve una matriz que contiene los nombres de los subelementos simples de un nodo en el orden en que aparecen los atributos en el nodo.

Comparar con la función GetSourceInstanceElementMap que devuelve un mapa de un nodo.

Para ingresar un n ruta en la función, haga doble clic en la carpeta del nodo XML deseada para insertar su ruta calificada en la ubicación del cursor. Para obtener más información, consulte las instrucciones sobre insertar rutas de nodo XML.

Ejemplos

// Appends all the attributes together without having
// to explicitly reference their source data elements
map = GetSourceInstanceElementMap([Values$Value.]);
names = GetSourceElementNames([Values$Value.]);

// The values as an array of values from the sub-elements
values = CollectValues(map, names);

GetSourceInstanceArray

Declaración

array GetSourceInstanceArray(node n)

Sintaxis

GetSourceInstanceArray(<n>)

Parámetros Requeridos

  • n: Una expresión de ruta de referencia de cadena a un nodo en la transformación actual

Descripción

Devuelve una matriz que contiene el valor del atributo de un nodo de elemento. El valor de la matriz está etiquetado con el nombre del atributo y se puede recuperar por su índice o por su nombre como en un elemento de datos de diccionario.

Como alternativa a esta función, consulte GetSourceInstanceMap.

Para ingresar un n ruta en la función, haga doble clic en la carpeta del nodo XML deseada para insertar su ruta calificada en la ubicación del cursor. Para obtener más información, consulte las instrucciones sobre insertar rutas de nodo XML.

Ejemplos

arr = GetSourceInstanceArray([Values$Value.]);
// To retrieve the value of the "Attr1" attribute:
// If "Attr1" is the first attribute name, you can use:
v = arr[0];
// Or, you can use the name "Attr1":
v = arr["Attr1"];

GetSourceInstanceElementArray

Declaración

array GetSourceInstanceElementArray(node n)

Sintaxis

GetSourceInstanceElementArray(<n>)

Parámetros Requeridos

  • n: Una expresión de ruta de referencia de cadena a un nodo en la transformación actual

Descripción

Devuelve una matriz que contiene el valor del subelemento de un nodo de elemento. El valor de la matriz está etiquetado con el nombre del subelemento y se puede recuperar por su índice o por su nombre como en el elemento de datos del diccionario.

Como alternativa a esta función, consulte GetSourceInstanceElementMap.

Para ingresar un n ruta en la función, haga doble clic en la carpeta del nodo XML deseada para insertar su ruta calificada en la ubicación del cursor. Para obtener más información, consulte las instrucciones sobre insertar rutas de nodo XML.

Ejemplos

arr = GetSourceInstanceElementMap([Values$Value.]);
// To retrieve the value of the "e1" sub-element:
// If "el" is the first sub-element, you can use:
v = arr[0];
// Or, you can use the name "e1":
v = arr["e1"];

GetSourceInstanceMap

Declaración

dictionary GetSourceInstanceMap(node n)

Sintaxis

GetSourceInstanceMap(<n>)

Parámetros Requeridos

  • n: Una expresión de ruta de referencia de cadena a un nodo en la transformación actual

Descripción

Devuelve un diccionario (mapa) que contiene el nombre del atributo y su valor de un nodo de elemento.

Como alternativa a esta función, consulte GetSourceInstanceArray.

Para ingresar un n ruta en la función, haga doble clic en la carpeta del nodo XML deseada para insertar su ruta calificada en la ubicación del cursor. Para obtener más información, consulte las instrucciones sobre insertar rutas de nodo XML.

Ejemplos

map = GetSourceInstanceMap([Values$Value.]);
v = map["Attr1"];
// Returns the value of the "Attr1" attribute

GetSourceInstanceElementMap

Declaración

dictionary GetSourceInstanceElementMap(node n)

Sintaxis

GetSourceInstanceElementMap(<n>)

Parámetros Requeridos

  • n: Una expresión de ruta de referencia de cadena a un nodo en la transformación actual

Descripción

Devuelve un diccionario (mapa) que contiene el valor del subelemento de un nodo de elemento.

Como alternativa a esta función, consulte GetSourceInstanceElementArray.

Para ingresar un n ruta en la función, haga doble clic en la carpeta del nodo XML deseada para insertar su ruta calificada en la ubicación del cursor. Para obtener más información, consulte las instrucciones sobre insertar rutas de nodo XML.

Ejemplos

map = GetSourceInstanceElementMap([Values$Value.]);
v = map["e1"];
// Returns the value of the "e1" sub-element

HasKey

Declaración

bool HasKey(dictionary dict, string key)

Sintaxis

HasKey(<dict>, <key>)

Parámetros Requeridos

  • dict: Un diccionario existente
  • key: Una clave para consultar en el diccionario.

Descripción

Comprueba si un diccionario contiene una clave especificada. Devoluciones false si el primer argumento no es un diccionario o si no se encontró la clave. Como función equivalente que funciona para matrices, consulte los ejemplos de la FindValue función.

Ejemplos

// Update the value in a dictionary "myDictionary"
// only if the key already exists
If(HasKey(myDictionary, "key"),
    myDictionary["key"] = "value");

Map

Declaración

dictionary Map()

Sintaxis

Map()

Descripción

Un alias para Dict. Ver la función Dict.

MapCache

Declaración

string MapCache(dictionary dict, string key, string value)

Sintaxis

MapCache(<dict>, <key>, <value>)

Parámetros Requeridos

  • dict: Un diccionario existente
  • key: Una clave para consultar en el diccionario.
  • value: Un valor que se utilizará (y almacenará) si la clave no está en el diccionario

Descripción

Esta función almacena en caché un par clave/valor en un diccionario. Si la clave ya existe en el diccionario, se devolverá el valor correspondiente; de lo contrario, se evaluará el tercer argumento y ese valor se almacenará en el diccionario de la clave.

Ejemplos

// Creating a dictionary "myDictionary"
// and caching values in it,
// if they don't already exist
myDictionary = Dict();
i=0;
a=MapCache(myDictionary, "key1", ++i);
b=MapCache(myDictionary, "key2", ++i);
c=MapCache(myDictionary, "key1", ++i);
result = i;
// The result will be
// result=2, a=1, b=2, and c=1
// as c's value will be retrieved
// rather than incremented

ReduceDimension

Declaración

array ReduceDimension(array arrayMultiD)

Sintaxis

ReduceDimension(<arrayMultiD>)

Parámetros Requeridos

  • arrayMultiD: Una matriz multidimensional

Descripción

Dada una matriz multidimensional con n dimensiones, la función devuelve una matriz con n-1 dimensiones. La dimensión más baja de la matriz de entrada desaparecerá y sus miembros se reunirán en la dimensión del siguiente nivel.

Ejemplos

prices = ReduceDimension(orders$company.order#.detail#.price);
// If orders$company.order#.detail#.price
// is a 2-dimensional source data element array,
// the function will return a one-dimensional array

a = {{"0_0", "0_1"}, {"1_0", "1_1"}};
result = ReduceDimension(a);
// result will be {0_0, 0_1, 1_0, 1_1}

RemoveKey

Declaración

bool RemoveKey(dictionary dict, string key)

Sintaxis

RemoveKey(<dict>, <key>)

Parámetros Requeridos

  • dict: Un diccionario existente
  • key: Una clave para consultar en el diccionario.

Descripción

Elimina un par clave-valor con una clave específica de un diccionario. La clave debe ser una cadena o tener una representación de cadena y no se permiten valores nulos. Devoluciones true si el par clave-valor se eliminó y false si la clave no existiera.

Ejemplos

// Removes a key-value pair if it
// exists in dictionary "myDictionary"
If(HasKey(myDictionary, "key"),
    RemoveKey(myDictionary, "key"));

SortArray

Declaración

void SortArray(array arrayToSort[, bool isAscending])

void SortArray(array arrayToSort, int index[, bool isAscending])

Sintaxis

SortArray(<arrayToSort>[, <isAscending>])

SortArray(<arrayToSort>, <index>[, <isAscending>])

Parámetros Requeridos

  • arrayToSort: Una matriz para ordenar
  • index: Para matrices multidimensionales, índice de la matriz que se va a ordenar (predeterminado 0)

Parámetros Opcionales

  • isAscending: Si la matriz se va a ordenar en orden ascendente (el valor predeterminado)

Descripción

Ordena una matriz por referencia. El valor de retorno no está definido y debe ignorarse.

En el primer formulario, el segundo parámetro (opcional) especifica el orden de clasificación.

En la segunda forma, para matrices multidimensionales, la función ordena la matriz según un índice de base cero especificado en el segundo parámetro (obligatorio). En la segunda forma, el tercer argumento (opcional) especifica el orden de clasificación.

El orden de clasificación predeterminado es ascendente en ambos formularios.

Después de que la función regrese, la matriz se ordenará en el lugar. Si se especifica, se ordenará según el índice.

Es posible realizar una clasificación múltiple de la misma matriz aplicando la SortArray funcionar repetidamente.

Ejemplos

// Sorting a one-dimensional array
arr1 = {"Carol", "Bob", "Alice"};
SortArray(arr1);
// arr1 is now {Alice, Bob, Carol}

// Sorting a two-dimensional array
arr2 = {{"a", 20, 1}, {"bc", 7, 12}, {"x", 20, 13}, {"d", 5, 4}};

// Sort arr2, order by third column, descending
SortArray(arr2, 2, false);
// arr2 is now {{x, 20, 13}, {bc, 7, 12}, {d, 5, 4}, {a, 20, 1}}

// Sort arr2, order by second column, ascending
SortArray(arr2, 1);
// arr2 is now {{d, 5, 4}, {bc, 7, 12}, {x, 20, 13}, {a, 20, 1}