Diccionario

Un componente de diccionario es un componente que está siempre disponible; no se define. Una variable basada en un componente de diccionario puede incluir un conjunto de claves y los valores relacionados y puede añadir y eliminar entradas de clave y valor en tiempo de ejecución. Las entradas se tratan como campos en un registro.

A continuación se proporciona un ejemplo de declaración de diccionario:
  row Dictionary 
    {
      ID        = 5,
      lastName  = "Twain",
      firstName = "Mark",
    };

Cuando incluye entradas en la declaración, cada nombre de clave es un identificador EGL que debe ajustarse al convenio de denominación de EGL. Cuando añade entradas en tiempo de ejecución, tiene más flexibilidad; puede especificar un literal de serie, una constante o una variable y en ese caso, el contenido puede ser una palabra reservada de EGL o puede incluir caracteres que no serían válidos en un identificador. Para conocer más detalles, consulte la sección Sintaxis de corchetes para el acceso dinámico.

A continuación se ofrecen ejemplos de asignaciones:
  row.age = 30;
  row["Credit"] = 700;
  row["Initial rating"] = 500
Si intenta asignar una clave que ya existe, se altera temporalmente la entrada de clave y valor existente. La asignación siguiente es válida y sustituye "Twain" por "Clemens":
  row.lastname = "Clemens";
Las asignaciones también pueden utilizarse para la recuperación de datos:
  lastname String
  age, credit, firstCredit int;

  lastname = row.lastname; 
  age = row.age;
  credit = row.credit;
  credit = row["Credit"];
  firstCredit = row["Initial rating"];
El valor en una entrada de clave y valor es de tipo ANY, lo que significa que puede poner distintos tipos de información en un solo diccionario. Cada valor puede ser uno de estos:
Al poner una variable en un diccionario se asigna una copia de la variable. Considere el componente de registro siguiente:
  Record myRecordPart
	   x int;
	 end

El código siguiente coloca una variable de tipo myRecordPart en el diccionario y después cambia un valor en la variable original:

  testValue int;

  myRecord myRecordPart;

  // establece un valor de variable y coloca
  // una copia de la variable en el diccionario.
  myRecord.x = 4; 
  row Dictionary
  {
    theRecord myRecord;
  } 
	
  // Coloca un valor nuevo en el registro original.
  myRecord.x = 700;

  // Accede a la copia del diccionario del registro, 
  // asignando 4 a testValue.
  testValue = row.theRecord.x;
Al asignar un diccionario a otro se sustituye el contenido del destino por el contenido origen y se alteran temporalmente los valores de las propiedades del diccionario destino que se describen posteriormente. La sentencia condicional en el código siguiente es verdadera, por ejemplo:
  row Dictionary { age = 30 };

  newRow Dictionary { };
  newRow = row

  // se resuelve en true
  if (newRow.age == 30)
    ;
  end

Un conjunto de propiedades en la declaración afectan al proceso del diccionario. Un conjunto de funciones específicas de diccionario proporcionan datos y servicios al código.

Propiedades de diccionario

Cada entrada de propiedad y valor es sintácticamente equivalente a una entrada de clave y valor, tal como se muestra en este ejemplo y las entradas pueden estar en cualquier orden:
  row Dictionary 
    { 
      // propiedades 
      caseSensitive = no,
      ordering = none,  
     
      // campos
      ID        = 5,
      lastName  = "Twain",
      firstName = "Mark"
      age = 30;
    };
El código no puede añadir ni recuperar una propiedad ni el valor correspondiente. En el caso improbable de que desee utilizar un nombre de propiedad como una clave, utilice el nombre de variable como calificador cuando especifique la clave o haga referencia a ella, como en este ejemplo:
  row Dictionary 
    { 
      // propiedades 
      caseSensitive = no,
      ordering = none,  
     
      // campos
      row.caseSensitive = "yes"
      row.ordering = 50,
      age = 30
    };
Las propiedades son las siguientes:
caseSensitive
Indica si la recuperación de una clave o del valor relacionado se ve afectada por el hecho de que la clave con la que se almacenó ese valor esté en mayúsculas o minúsculas. Las opciones son las siguientes:
No (el valor por omisión)
El acceso de clave no se ve afectado por las mayúsculas/minúsculas de la clave y las sentencias siguientes son equivalentes:
  age = row.age;
  age = row.AGE;
  age = row["aGe"];
Yes
Las sentencias siguientes pueden tener distintos resultandos, incluso aunque EGL sea principalmente un lenguaje no sensible a las mayúsculas/minúsculas:
  age = row.age;
  age = row.AGE;
  age = row["aGe"];

El valor de la propiedad caseSensitive afecta al comportamiento de varias de las funciones descrita en una sección posterior.

ordering
Indica cómo deben ordenarse las entradas de clave y valor a efectos de recuperación. El valor de esta propiedad afecta al comportamiento de las funciones getKeys y getValues, tal como se describe en una sección posterior.

Las opciones son las siguientes:

None (valor por omisión)
El código no puede fiarse del orden de las entradas de clave y valor.

Cuando el valor de la propiedad ordering es None, el orden de las claves (cuando se invoca la función getKeys) puede no ser igual que el orden de los valores (cuando se invoca la función getValues).

ByInsertion
Los pares de clave y valor están disponibles por el orden de inserción. Se considera que las entradas de la declaración se insertan primero, por orden de izquierda a derecha.
ByKey
Los pares de clave y valor están disponibles por orden de clave.

Funciones de diccionario

Para invocar las funciones siguientes, califique el nombre de función con el nombre del diccionario, como en este ejemplo en el que el diccionario se llama row:
  if (row.containsKey(age))
    ; 
  end

containsKey()

  dictionaryName.containsKey(clave String in) returns (Boolean)

Esta función devuelve true o false, dependiendo de si la serie de entrada (clave) es una clave en el diccionario. Si la propiedad del diccionario caseSensitive se establece en no, no se tienen en cuenta las mayúsculas/minúsculas, de lo contrario la función busca una coincidencia exacta, incluyendo las mayúsculas/minúsculas.

containsKey solo se utiliza en una expresión lógica.

getKeys()

  dictionaryName.getKeys ( ) returns (String[ ])

Esta función devuelve una matriz de series, cada una de las cuales es una clave en el diccionario.

Si la propiedad del diccionario caseSensitive se establece en no, cada clave devuelta está en minúsculas, de lo contrario cada clave devuelta está en mayúsculas o minúsculas según lo estuviera la clave en la que estaba almacenada.

Si la propiedad de diccionario ordering se establece en no, no puede fiarse del orden de las claves devueltas, de lo contrario el orden es el especificado en la descripción de esa propiedad.

getValues()

  dictionaryName.getValues ( ) returns (ANY[ ])

Esta función devuelve una matriz de valores de cualquier tipo. Cada valor está asociado con una clave del diccionario.

insertAll()

  nombreDiccionario.insertAll(diccionariOrigen Dictionary in)

Esta función actúa como si una serie de sentencias de asignación copiara las entradas de clave y valor del diccionario de origen (diccionarioOrigen) al destino, que es el diccionario cuyo nombre califica el nombre de función.

Si una clave está en el origen y no en el destino, se copia la entrada de clave y valor en el destino. Si una clave está tanto en el origen como en el destino, el valor de la entrada origen altera temporalmente la entrada en el destino. La determinación de si una clave del destino coincide con una del origen se ve afectada por el valor de la propiedad caseSensitive en cada diccionario.

Esta función es distinta de la asignación de un diccionario a otro porque la función insertAll retiene estas entradas:
  • Las entradas de propiedad y valor en el destino
  • Las entradas de clave y valor que están en el destino pero no en el origen.

removeElement()

  nombreDiccionario.removeElement(clave String in)

Esta función elimina la entrada cuya serie de entrada (clave) es una clave del diccionario. Si la propiedad del diccionario caseSensitive se establece en no, no se tienen en cuenta las mayúsculas/minúsculas, de lo contrario la función busca una coincidencia exacta, incluyendo las mayúsculas/minúsculas.

removeAll()

  nombreDiccionario.removeAll( )

Esta función elimina todas las entradas de clave y valor del diccionario pero no tiene efecto sobre las propiedades del diccionario.

size()

  nombreDiccionario.size( ) returns (INT)

Devuelve un entero que indica el número de entradas de clave y valor en el diccionario.

Consulta relacionada
Expresiones lógicas

Condiciones de uso | Comentarios
(C) Copyright IBM Corporation 2000, 2005. Reservados todos los derechos.