SilkTest点滴18 – 数组之一Array

相对于其他语言而言,4Test提供了两种动态数组,其一是Array,另一个是List。但是它们的使用方法和其他常见的语言略有不同,所以有必要专门介绍一下它们。
Array关键字用来声明数组变量,它的语法最主要的有两种:
(1)Array [维数1][维数2]… Of 数据类型 数组名
(2)数据类型 数组名[维数1][维数2]…
注意,在array中,所有的数据类型必须一致。你必须在定义该数组的时候指定它的类型和维数。
Array由层次型的数据组成,每一层被称为一维。每层都包含指定数目的元素或者子数组。最下面一层的叶子节点包含着真正的元素,其他的层包含的是子数组。考虑下面的数组定义:
ARRAY[2][3][4] OF INTEGER MyArray
该数组在第一层有两个子数组,在第二层上对于每个第一层的子数组都有3个子数组,对于每个第二层的子数组都有4个元素。所以,第一层有2个子数组,第二层有6个子数组,整个数组包含24个元素。
Array数组的的大小必须在1到2147483647 (MAXINT)之间。并且请注意array2[2,10,5]和array2[2][10][5]代表的是同一个元素。
你可以使用LIST的构造符号{},当你使用大括号来声明一个array数组对象的时候,4Test隐式地将产生的LIST转换为一个array。你不可以使用大括号{}来修改一个已经存在的array,你只能用大括号{}来初始化一个array。
下面是一个使用array的例子:
ARRAY[50] OF STRING array1
       ARRAY[20][20][20] OF INTEGER array2
       testcase array_example ()
          // 第一个array中的第39个元素
          array1[39] = “alphabet soup”         
          // 下面两种方法存取的是同一个元素
          array2[2, 4, 2] = 5
          Print (array2[2][4][2]) //prints 5
          // 初始化一个数组,从索引1开始,并且覆盖曾经有的值
          array1 = {…}
             “foo”
             “bar”
          // 另一种可选的初始化方法
          array1 = {“foo”, “bar”}
在知道了array的基本概念之后,让我们来看看常用的array数组函数。
1. ArrayFind()
该函数用来查找数组中某个元素的位置。
注意:SilkTest中数组的下标是从1开始的,这点和许多类C的语言是不同的。
该函数的原型为iPos = ArrayFind (aArray, aElem [, iMaxIndex])
其中iPost是返回的元素位置,数据类型为Integer。aArray是想要查找的数组名,数据类型是Array of AnyType。aElem是想要查找的元素,数据类型是AnyType。iMaxIndex为可选参数,表示最大搜寻范围,数据类型是integer。
该函数在找到要找的数组元素时,返回其索引。如果指定了iMaxIndex,ArrayFind将只查找到第一个iMaxIndex,否则将查找整个数组。如果没有找到想要查找的元素,该函数将返回0.当对多维数组进行查找时,需要指定想要查找的子数组。下面是一个例子:
INTEGER aiTempPerDay[5][4]
       testcase arrayfind_example ()
          aiTempPerDay = {…}
             {10, 12, 8, 17}
             {-1, 0, 17, -9}
             {14, 1, 1, 0}
             {75, 32, 18, 103}
             {9, -7, -2, 3}
          Print (ArrayFind (aiTempPerDay[1], 8))       //打印 3
          Print (ArrayFind (aiTempPerDay[5], -7))      // 打印2
          Print (ArrayFind (aiTempPerDay[4], 103, 3)) // 打印0
          Print (ArrayFind (aiTempPerDay[2], 20))      // 打印0
          Print (ArrayFind (aiTempPerDay, {-1, 0, 17, -9})) // 打印2
2.ArraySize()
该函数返回一个数组里面的元素个数。其原型为:
iNumElems = ArraySize (aArray [, iDim])
其中iNumElems表示数组中元素个数,数据类型是integer,aArray是想要计算的数组名,数据类型是Array of AnyType。iDim是可选参数,其数据类型为integer,表示想要计算的数组的维数,用在需要对多维数组的某一维进行统计的时候,如果统计的数组不是多维的,该参数必须是1。
注意,ArraySize函数不能用于我们下一节将要讲到的List数据类型。因为ArraySize()是用来统计数组的尺寸的,但是List变量是没有尺寸大小的。下面这个例子用来统计一个数组aiTempPerDay第二维的大小。iElements = ArraySize (aiTempPerDay, 2)
另外,函数ArraySize常常用来检查是否一个数组的大小发生了动态的改变。
1.       ArrayResize()
改变数组中元素的个数。其函数原型是:
ArrayResize (aArray, iNewSize [, iDim])
参数aArray表示数组名,它是一个inout的变量,数据类型为Array of AnyType。iNewSize是新数组的大小,数据类型是integer,iDim是一个可选参数,表示需要resize的数组的某一维,如果数组不是多维的,那么该参数必须为1.其数据类型是integer。
下面是一个ArrayResize函数的使用样例:
INTEGER aiTempPerDay[5][4]
       testcase arayresize_example ()
          aiTempPerDay = {…}
             {10, 12, 8, 17}
             {-1, 0, 17, -9}
             {14, 1, 1, 0}
             {75, 32, 18, 103}
             {9, -7, -2, 3}
          // 将第2维的大小从4改成8
          ArrayResize (aiTempPerDay, 8, 2)
2.       ArraySort()
该函数在一个数组中将各元素排序,其函数原型如下:
ArraySort (aArray [, iMaxIndex])
参数aArray不用多说,是数组名。不过它的类型不是Array of AnyType,而是inout Array of Boolean, integer, real ,string 或者是ENUM。如果一个多维的数组,你可以指定其子数组进行排序。iMaxIndex是一个可选参数,表示最大排序范围。如果省略该参数,表示对整个数组进行排序。
注意,在windows里面silktest使用基于字典的算法进行排序。
如果要对string的数组进行比较并且用ASCII值比较,需要在partner.ini文件Runtime选项中添加一行AsciiSort=TRUE。这个设置会在比较string的时候有用,而不仅仅是对list of string的比较有效。
ArraySort函数会改变传入的数组,下面是一个例子:
INTEGER aiTempPerDay[5][4]
       testcase arraysort_example ()
          aiTempPerDay = {…}
             {10, 12, 8, 17}
             {-1, 0, 17, -9}
             {14, 1, 1, 0}
             {75, 32, 18, 103}
             {9, -7, -2, 3}
          ArraySort (aiTempPerDay[3])
          Print (aiTempPerDay[3])     // 打印: {0,1,1,14}
          ArraySort (aiTempPerDay[5], 3)
          Print (aiTempPerDay[5])     // 打印: {-7,-2,9,3}
3.       IsArray()
测试一个表达式是否是一个array。
该函数的原型为:bTest = IsArray (aExpression)
其中bTest是Boolean类型的返回值。aExpresstion是需要测试的表达式,它的类型是AnyType。下面是一个例子:
testcase IsArrayExample ()
          INTEGER i = 1
          ARRAY[2] OF STRING asFruit = {…}
             “apples”
             “oranges”
          Print (IsArray (asFruit)) // 打印: TRUE
          Print (IsArray (i)) // 打印: FALSE

Leave a comment

请输入正确的验证码