Dictionary

字典部件是一直可用的部件;不用定义它。基于字典部件的变量可能包括键及其相关值的集合,您可以在运行时添加和除去键和值条目。这些条目被视作记录中的字段。

以下是字典声明的一个示例:
  row Dictionary 
    {
      ID        = 5,
      lastName  = "Twain",
      firstName = "Mark",
    };

在声明中包括条目时,每个键名都是一定符合 EGL 命名约定的 EGL 标识。在运行时添加条目时,可以更加灵活一些;可以指定字符串文字、常量或变量,在这种情况下,常量可以是 EGL 保留字或者可以包括在标识中无效的字符。有关详细信息,请参阅动态访问的括号语法

以下是一些赋值示例:
  row.age = 30;
  row["Credit"] = 700;
  row["Initial rating"] = 500
如果尝试指定已经存在的键,则覆盖现有键与值条目。以下赋值有效并将“Twain”替换为“Clemens”:
  row.lastname = "Clemens";
赋值也可以用于数据检索:
  lastname String
  age, credit, firstCredit int;

  lastname = row.lastname; 
  age = row.age;
  credit = row.credit;
  credit = row["Credit"];
  firstCredit = row["Initial rating"];
键与值条目中的值的类型为 ANY,这表示可将不同种类的信息放在单个字典中。每个值可以是下列任何一项:
将变量放在字典中将给出变量的副本。考虑以下记录部件:
  Record myRecordPart
	   x int;
	 end 

以下代码将类型为 myRecordPart 的变量放在字典中,然后更改原始变量中的值:

  testValue int;

  myRecord myRecordPart;

  // sets a variable value and places
  // a copy of the variable into the dictionary.
  myRecord.x = 4; 
  row Dictionary
  {
    theRecord myRecord;
  } 
	
  // Places a new value in the original record.
  myRecord.x = 700;

  // Accesses the dictionary's copy of the record, 
  // assigning 4 to testValue.
  testValue = row.theRecord.x;
将一个字典赋值给另一个字典会将目标内容替换为源内容,并且覆盖目标字典的属性值,如后所述。例如,以下代码中的条件语句求值为 true:
  row Dictionary { age = 30 };

  newRow Dictionary { };
  newRow = row

  // resolves to true
  if (newRow.age == 30)
    ;
  end
    

声明中的一组属性将影响处理字典的方式。一组特定于字典的函数向代码提供数据和服务。

字典属性

如以下示例中所示,每个属性与值条目在句法上相当于键与值条目,并且这些条目可以是任何顺序:
  row Dictionary 
    { 
      // properties 
      caseSensitive = no,
      ordering = none,  
     
      // fields
      ID        = 5,
      lastName  = "Twain",
      firstName = "Mark"
      age = 30;
    };
代码既不能添加也不能检索属性或属性值。万一想要将属性名用作键,则在指定或引用键时将该变量名用作限定符,如以下示例中所示:
  row Dictionary 
    { 
      // properties 
      caseSensitive = no,
      ordering = none,  
     
      // fields
      row.caseSensitive = "yes"
      row.ordering = 50,
      age = 30
    };
属性如下所示:
caseSensitive
指示存储相关值时使用的键的大小写是否会影响键或值的检索。选项如下所示:
No(缺省值)
键的访问不受键的大小写的影响,下列语句起到的作用是一样的:
  age = row.age;
  age = row.AGE;
  age = row["aGe"];
Yes
执行下列语句会得到不同结果,即使 EGL 是根本不区分大小写的语言也是如此:
  age = row.age;
  age = row.AGE;
  age = row["aGe"];

属性 caseSensitive 的值会影响后面一节中描述的若干函数的行为。

ordering
指示键与值条目用于检索的排序方式。如后面一节中所述,此属性的值会影响函数 getKeysgetValues 的行为。

选项如下所示:

None(缺省值)
代码不能依赖于键与值条目的顺序。

如果属性 ordering 的值为“None”,则键的顺序(在调用函数 getKeys 时)可能与值的顺序(在调用函数 getValues 时)不同。

ByInsertion
键-值对是以插入时的顺序提供的。声明中的所有条目被视为先以从左至右的顺序插入。
ByKey
键-值对是以键顺序提供的。

字典函数

要调用以下任何函数,用字典的名称来限定函数名,如以下示例中所示(此时字典被称为 row):
  if (row.containsKey(age))
    ; 
    end

containsKey()

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

根据输入字符串(key)在字典中是否为键,此函数解析为 true 或 false。如果字典属性 caseSensitive 被设置为 no,则不考虑大小写;否则函数将搜索完全匹配,包括大小写匹配。

containsKey 仅在逻辑表达式中使用。

getKeys()

  dictionaryName.getKeys ( ) returns (String[ ])

此函数返回一组字符串,每个字符串都是字典中的键。

如果字典属性 caseSensitive 被设置为 no,则每个返回键为小写;否则每个返回键为存储键时所使用的大小写。

如果字典属性 ordering 被设置为 no,则不能依赖于返回键的顺序;否则顺序为该属性的描述中指定的顺序。

getValues()

  dictionaryName.getValues ( ) returns (ANY[ ])

此函数返回类型为 ANY 的一组值。每个值都与字典中的键相关联。

insertAll()

  dictionaryName.insertAll(sourceDictionary Dictionary in)

此函数的行为方式就像一系列赋值语句将源字典(sourceDictionary)中的键与值条目复制至目标,目标也是一个字典,其名称限定函数名。

如果键在源中而不在目标中,则键与值条目将复制至目标。如果键既在源中又在目标中,则源条目的值将覆盖目标中该条目的值。在确定目标中的键是否与源中的键相匹配时,会受到每个字典中的属性 caseSensitive 的影响。

此函数不同于将一个字典赋值给另一个字典,原因是函数 insertAll 会保留下列条目:
  • 目标中的属性与值条目;以及
  • 在目标中但不在源中的键与值条目。

removeElement()

  dictionaryName.removeElement(key String in)

此函数除去其输入字符串(key)充当字典中的键的条目。如果字典属性 caseSensitive 被设置为 no,则不考虑大小写;否则函数将搜索完全匹配,包括大小写匹配。

removeAll()

  dictionaryName.removeAll( )

此函数除去字典中的所有键与值条目,但不会影响字典的属性。

size()

  dictionaryName.size( ) returns (INT)

返回一个整数,它指示字典中的键与值条目的数目。

相关参考
逻辑表达式

使用条款 | 反馈
(C) Copyright IBM Corporation 2000, 2005. All Rights Reserved.