Matrices

Un arreglo es una estructura de datos que contiene un grupo de valores. Los arreglos son útiles cuando se tiene una lista de elementos que son de un tipo similar. Por ejemplo, las listas de los códigos de área, números de teléfono o los nombres de los clientes.

Hay dos tipos de arreglos que puede usar en Studio:

  • Arreglos de cadenas: Cadenas delimitadas por barras verticales en una variable. Contienen valores de cadena, que pueden estar compuestos por caracteres alfanuméricos.
  • Arreglos dinámicos: Arreglos que se almacenan en objetos dinámicos de datos.

Si tiene una lista donde los datos sean todos los diferentes tipos de información sobre una sola entidad, el objetos dinámico de datos es la estructura de datos que conviene más usar. Se encuentra disponible una comparación entre arreglos y objeto en la página de ayuda de las Estructuras de Datos.

Datos clave sobre los arreglos

  • Un arreglo debe tener al menos dos elementos. Un arreglo con un solo elemento parece ser una variable regular. Sigue siendo un arreglo y puede llamarlo como arreglo. Lo mismo sucede con los arreglos dinámicos.
  • En Studio, los índices del arreglo comienzan en 1.

  • Están disponibles algunas funciones para su uso con arreglos, como index() y indexof().

  • Puede utilizar cualquier delimitador con arreglos de cadenas. Sin embargo, para poder leerse de forma nativa, un arreglo de cadenas debe utilizar un carácter de barra vertical como delimitador.

Pruébelo

Descargue el script de Ejemplos de Arreglos e impórtelo a Studio. Están disponibles muchos de los ejemplos de esta página de ayuda en las acciones Snippet del script de ejemplo. Puede abrir la ventana del editor de Snippets y ejecutar el depurador para ver el ejemplo.

Resumen de la Sintaxis de los Arreglos

Cree un arreglo de cadenas con una de las siguientes sintaxis.

Asigne un valor a cada elemento usando su índice:

ASSIGN <var>[<index1>] = "<value1>"

ASSIGN <var>[<index2>] = "<value2>"

ASSIGN <var>[<index3>] = "<value3>"

Asigne todos los valores de los elementos a una variable en una cadena delimitada por barras verticales:

ASSIGN <var> = "<value1> | <value2> | <value3>"

Cree un arreglo dinámico con la siguiente sintaxis:

DYNAMIC <object>

ASSIGN <object>.<member>[<index>].<sub-member>= "value"

Se admiten formatos adicionales de arreglos dinámicos.

Para hacer referencia a un elemento específico en un arreglo de cadenas, utilice esta sintaxis:

<var>[index]

Para hacer referencia a un elemento específico en un arreglo dinámico, utilice esta sintaxis:

ASSIGN <var> = <object>.<member>[<index>].<arrayElement>

Elementos e índices

Los valores que contiene un arreglo se llaman elementos. El script realiza un seguimiento del orden de los elementos del arreglo. Cada elemento de un arreglo tiene un identificador numérico, llamado número de índice. El índice se asigna automáticamente a cada elemento según su posición en el arreglo. Si reorganiza, agrega o elimina elementos, pueden cambiar sus índices.

En Studio, los índices del arreglo comienzan en 1. Los índices deben ser números enteros positivos. Necesita conocer el índice para interactuar con un elemento específico del arreglo. Puede utilizar la indexof() función para determinar el índice de un elemento, si no lo conoce.

Consulte el elemento individual del Arreglo de Cadenas

Cuando haga referencia a un elemento individual de un arreglo de cadenas, utilice esta sintaxis: <arrayElement>[<index> ]. Puede utilizar esta sintaxis en cualquier lado del signo igual. Por ejemplo, puede usarlo para asignar un valor a un elemento o para hacer referencia al valor de un elemento, como al asignar el valor a otra variable.

Por ejemplo:

ASSIGN heroes[1] = "Beowulf"
ASSIGN heroes[2] = "Sir Gawain" 
ASSIGN heroes[3] = "Byrhtnoth"

En este ejemplo, el índice de Beowulf es 1, el de Sir Gawain es 2 y el de Byrtnoth es 3. Estos elementos tienen los mismos índices cuando se mira el arreglo en el formato delimitado por barras verticales:  name = "Beowulf|Sir Gawain|Byrhtnoth". Para determinar los índices de un arreglo en este formato, cuente los elementos de izquierda a derecha, comenzando con 1.

Los índices se completan en orden numérico

Los índices se completan uno por uno en orden numérico. Si hace referencia a un índice que no existe actualmente en el arreglo, lo crea el script y estará vacío a menos que se le asigne un valor. El script crea cualquier índice que no exista entre aquel al que hace referencia y el último elemento anterior del arreglo. Quedan vacíos los elementos que el script agrega para rellenar los índices. Por ejemplo:

ASSIGN heroes = "Beowulf|Sir Gawain|Byrhtnoth" 
ASSIGN heroes[6] = "Lancelot"

El arreglo resultante es heroes = "Beowulf|Sir Gawain|Byrhtnoth|||Lancelot". El script agregó elementos para los índices 4 y 5, pero como no se les asignó ningún valor, están vacíos.

De manera similar, si intenta extraer un valor de un elemento que no existe, se crea ese elemento. También se crean y estarán vacíos todos los elementos entre al que intentó hacer referencia y el último elemento anterior.

Si se hace referencia a un elemento deun arreglo matriz vacío en un contexto que espera un número, se comporta el script como si el valor fuera cero.

Determinar el siguiente índice no utilizado

Para evitar la creación de elementos vacíos innecesarios en un arreglo, puede determinar el siguiente índice no utilizado. Debe contar los elementos del arreglo y luego sumar 1 a ese número. Esto le brinda el siguiente número abierto del índice.

Puede hacerlo, use la size() función. Por ejemplo:

ASSIGN heroes = "Beowulf|Sir Gawain|Byrhtnoth"  
ASSIGN nextIndex = heroes.size() + 1
ASSIGN heroes[nextIndex] = Roland

En este ejemplo, heroes.size() devuelve el número de elementos en el arreglo de nombres. El valor de totalNames es 3. Al agregarle uno y usar la variable nextIndex en lugar del número de índice, puede agregar un elemento al arreglo.

También puede hacer esto usando la función count().

Arreglos de cadenas

Los arreglos de cadenas se pueden definir de dos maneras. La primera es nombrar explícitamente cada elemento en lo individual. El siguiente ejemplo muestra un arreglo de cadenas que contiene valores de texto definidos elemento por elemento.

ASSIGN heroes[1] = "Beowulf"
ASSIGN heroes[2] = "Sir Gawain" 
ASSIGN heroes[3] = "Byrhtnoth"

El número entre corchetes después del nombre del arreglo es el número de índice del elemento. Este es el identificador de cada elemento.

La segunda forma de definir un arreglo de cadenas es con una cadena delimitada por barras verticales utilizando un solo carácter de barra vertical (|) entre cada elemento. Este ejemplo muestra el arreglo del primer ejemplo definido como una cadena delimitada por barras verticales. Cuando cree un arreglo de cadenas delimitadas por barras verticales, los valores en el lado derecho de la declaración deben ir entre comillas dobles.

ASSIGN heroes = "Beowulf|Sir Gawain|Byrhtnoth"

No hay diferencia entre las funciones y puede usarlas indistintamente. Ambos métodos para definir el arreglo de cadenas producen el mismo resultado, una variable que contiene un arreglo de elementos.

No es necesario usar la palabra clave ASSIGN al declarar una matriz tipo string. Sin embargo, es útil usarla. Incluir ASSIGN facilita la localización con la Búsqueda Avanzada del lugar de su script donde introdujo la matriz. Sin ASSIGN, debe buscar el nombre de la matriz. Los resultados de la búsqueda mostrarán cada referencia a la serie que exista en su script. Cuando incluye ASSIGN en su término de búsqueda, la búsqueda devuelve únicamente los resultados donde está asignada explícitamente la variable. Para declarar una variable sin ASSIGN, utilice esta sintaxis: <name> = "<value>"

Arreglos dinámicos

Los arreglos dinámicos pueden adoptar varias formas:

  • El objeto dinámico de datos contiene un arreglo. Cada elemento del arreglo también es un miembro del objeto.

    DYNAMIC beowulfLocations 
    ASSIGN beowulfLocations[1] = "Land of the Geats"
    ASSIGN beowulfLocations[2] = "Heorot" 
    ASSIGN beowulfLocations[3] = "Earnanæs"
  • El objeto dinámico contiene un miembro que contiene una matriz. Los demás miembros del objeto pueden contener valores numéricos o de cadena, o podrían ser otros arreglos.

    DYNAMIC beowulfCharacteristics 
    ASSIGN beowulfCharacteristics.foe[1].characteristics[1] = "Grendel"
    ASSIGN beowulfCharacteristics.foe[1].characteristics[2] = "son of Cain"
    ASSIGN beowulfCharacteristics.foe[2] = $"Grendel\'s mother" 
    ASSIGN beowulfCharacteristics.foe[3] = "Dragon"
  • Un arreglo de cadenas contiene elementos y cada uno de ellos contiene un objeto dinámico de datos.

    DYNAMIC epicPoems
    ASSIGN epicPoems.poemName = "Beowulf"
    DYNAMIC heroes 
    ASSIGN heroes.heroName = "Beowulf"
    DYNAMIC monsters
    ASSIGN monsters.monsterName = "Grendel"
    ASSIGN oldEnglish[1] = epicPoems
    ASSIGN oldEnglish[2] = heroes
    ASSIGN oldEnglish[3] = monsters

    Puede ver el contenido de los objetos dinámicos y del arreglo de cadenas en la pestaña Variables como árbol en la ventana del editor de Snippets cuando ejecuta el depurador.

    No se puede utilizar este tipo de arreglo dinámico cuando necesite que su script funcione con otros sistemas, como cuando se conecta a API. No se pueden serializar los datos que contiene el arreglo de cadenas ni convertir en cadenas JSON o XML.

Hacer referencia a un elemento del arreglo por ubicación

Puede hacer referencia a un elemento en una cadena o arreglo dinámico utilizando su ubicación en el arreglo, que se especifica por su índice. Por ejemplo:

ASSIGN heroes = "Beowulf|Sir Gawain|Byrhtnoth"
ASSIGN currentName = heroes[2]

El valor de currentName es Sir Gawain.

Puede utilizar una variable en lugar del número de índice a cada lado del signo igual en una declaración ASSIGN . Esto le permite hacer referencia a índices específicos sin codificar el índice en el script. Por ejemplo:

ASSIGN heroes = "Beowulf|Sir Gawain|Byrhtnoth"
ASSIGN location = 2
ASSIGN currentHero = heroes[location]
ASSIGN nextIndex = heroes.count() + 1
ASSIGN heroes[nextIndex] = "Roland"

El valor de currentHero en este ejemplo es Sir Gawain. Las dos últimas líneas del ejemplo anterior muestran el uso de una variable como índice del lado izquierdo de la declaración ASSIGN . También demuestra el uso de la función count() para devolver el número de elementos del arreglo. Se utiliza esta información para agregar un nuevo elemento en el siguiente índice vacío.

Cuando usa una variable para el número de índice, no necesita usar llaves alrededor del nombre de la variable. El script espera un valor numérico entre corchetes en el nombre del arreglo. Éste supone que todo lo que no sea un número es una variable, por lo que busca una variable con ese nombre. Debe haber una declaración de variable correspondiente donde asigne un valor numérico. Si no hay ninguna, se produce el siguiente error:

_ERR=In Snippet line 12: Array index must be >= 1.

Si está conectada la bifurcación Error para la acción Snippet , la toma el script cuando ocurre este error.

Utilice FOREACH con un Arreglo de cadenas

Puede usar una FOREACH declaración con arreglos de cadenas para iterar por cada elemento.

ASSIGN heroes = "Beowulf|Sir Gawain|Byrhtnoth|Lancelot"
 FOREACH elem IN heroes 
{
   ASSIGN aName = elem 
}

En este ejemplo, se actualizan elem y aName con cada iteración. La variable elem contiene el elemento actual que está procesando el ciclo FOREACH. Se actualiza el script aName con el contenido de elem. Al final de cada iteración, elem y aName conservan el mismo valor, pero en medio de la iteración, elem mantiene el valor nuevo y aName el valor anterior (o ningún valor, en el caso del inicio de la primera iteración).

Puede ver esto claramente en el snippet FOREACH Loop with a String Array del script de Ejemplos de Arreglos. Para ver la forma en que se actualizan las variables, recorra el snippet línea por línea.

Utilice FOR con un Arreglo de Cadenas

Puede utilizar un ciclo FOR con un arreglo de cadenas para recorrer el arreglo y realizar una acción definida un número determinado de veces.

ASSIGN heroes = "Beowulf|Sir Gawain|Byrhtnoth|Lancelot"
FOR i = 1 TO heroes.count 
   {    
      item = "{heroes[i]}" 
   } 
        

El resultado de este ejemplo es que se actualiza Item en cada iteración del ciclo FOR con el contenido del arreglo heroes en la ubicación del índice que especifica el valor de i. El ciclo FOR deja de iterar después de llegar al final del arreglo de cadenas, como lo indica heroes.count.

Puede ver este ciclo en el snippet FOR Loop with a String Array en el script de Ejemplos de Arreglos.

Usar funciones con arreglos

Puede usar funciones con los arreglos. Use el nombre del arreglo con el índice entre corchetes, luego agregue el nombre de la función usando notación de puntos. Esto se demuestra con el siguiente ejemplo:


ASSIGN heroes = "Beowulf|Sir Gawain|Byrhtnoth"
ASSIGN miniHero = "{heroes[2].lower}"
ASSIGN yellyHero = "{heroes[2].upper}"

Los resultados de este ejemplo son miniHero = sir gawain y yellyHero = SIR GAWAIN.

No todas las funciones operan con todos los arreglos. Algunas sólo funcionan con ciertos tipos de valores. Verifique los tipos con los que opera la función que desee utilizar.

Usted puede usar funciones con los arreglos dinámicos. Sin embargo, dependiendo del arreglo dinámico específico y de lo que contiene, quizá necesite usar una propiedad de objeto especial.$valor. Algunas funciones no operarán sobre un objeto completo. Por ejemplo, no puede utilizar la función lower() en un arreglo de objetos. El script ignoraría la función si usted intentara esto. En estos casos, debe emplear soluciones alternativas. Por ejemplo, puede copiar los valores específicos de los objetos del arreglo a una variable por separado. Después puede usar lower() sobre el contenido de la variable y, si es necesario, copiar nuevamente al objeto el valor convertido.

Las funciones de la siguiente tabla están diseñadas específicamente para trabajar con arreglos. Puede probar estas funciones en el snippet Functions and Arrays del script de Ejemplos de Arreglos.

Función

Descripción

count()

Devuelve el número de elementos en un arreglo u objeto.

index(indexValue)

Devuelve el elemento del arreglo del contenido de la variable de acuerdo con el indexValue especificado.

indexof(text)

Devuelve la posición del carácter del text que se especifica en el contenido de una variable.

size()

Devuelve el número de elementos en un arreglo.

split(delimiter)

Convierte el contenido de una variable en una cadena delimitada por barras verticales que puede tratarse como un arreglo. Reemplaza el delimiter existente especificado por un carácter de barra vertical.