一、数组的初始化
SSL中,数组下标从1开始!
1-1、不知道数组的长度
:DECLARE a6;
a6 := {};
Aadd(a6,'a');
Aadd(a6,'b');
Aadd(a6,'c');
当用a := {}创建一个数组的时候,不可以用a[1] = 值,来赋值!
1-2、知道数组的长度
方式一:
:DECLARE a5;
a5 := {,,};
a5[1] := 'a';
a5[2] := 'b';
a5[3] := 'c';
方式二:ArrayNew()函数
使用指定数量的元素和维度创建一个未初始化的数组。
aArray := ArrayNew(5);
/*aArray := {NIL, NIL, NIL, NIL, NIL};*/
aArray := ArrayNew(3, 2)
/*aArray := {{NIL, NIL}, {NIL, NIL}, {NIL, NIL}};*/
:DECLARE aMyArr;
aMyArr:=ArrayNew(3);
aMyArr[1]:=1;
aMyArr[2]:=2;
aMyArr[3]:="a";
/*aMyArr={1,2,a}*/
usrmes("aMyArr=", aMyArr);
二、Aadd()函数
动态新增数组的长度,向数组末尾添加函数。
:DEFAULT ListArray,{5,10,15};
/*{5,10,15,20};*/
Aadd(ListArray, 20);
usrmes(ListArray);
/*{5,10,15,20,{30,40}};*/
Aadd(ListArray, {30,40});
usrmes(ListArray);
此函数可将目标数组的实际长度增加1。
注意:
数组中可以添加任意类型的元素!!!
:DECLARE a1; a1 := {1,2,3}; Aadd(a1, "abc"); usrmes("a1=", a1);
三、AEval() 函数
Aeval(Array Name, Code Block, <Start>, <Count>) ;
:DECLARE aArray, aResult;
aArray := {1,2,3};
/*返回值;*/
aResult := {};
Aeval(aArray,{|X| Aadd(aResult,X+1) } );
/*{2,3,4}*/
usrmes(aResult);
注意:
Aeval()函数忽略了代码块的返回值!
四、AEvalA() 函数
Aeval()函数忽略了代码块的返回值!而AEvalA()则将返回值分配给数组元素。
:DECLARE aArray2;
aArray2 := {1,2,3};
AevalA(aArray2,{|X| X+1 } );
/*直接在原数组中返回;*/
usrmes(aArray2);
五、AFill() 函数
AFill()通过为指定范围内的每个数组元素分配<uValle>,用任何数据类型的单个值填充指定的数组。
AFill(<aTarget>, <uValue>, [<nStart>], [<nCount>])
:DECLARE aLogic; // aLogic is {NIL}
aLogic := {.T., .T., .T.};
AFill(aLogic, .F.); // aLogic is {.F., .F., .F.}
AFill(aLogic, .T., 2, 2); // aLogic is {.F., .T., .T.}
:DECLARE a2; //a 2-dimensional array
a2 := {{1,2,3},{4,5,6},{7,8,9}};
AFill(a2[1], "One");
AFill(a2[2], "Two");
AFill(a2[3], "Three");
// {{One,One,One},{Two,Two,Two},{Three,Three,Three}};
六、ArrayCalc() 函数
用于对由Option关键字指示的数组执行多个计算类型。
ArrayCalc(Array, Option, SecArray, Beg, Cnt )
RESIZE:调整大小将更改的实际长度。 新的长度将由<SecArray>指定。
- 缩短:丢失末尾;(截断数组!)
- 加长:用NIL填充!
INS:
INS将一个新元素插入到指定的数组中。
新插入的元素为 NIL,直到为其分配一个新值为止。插入之后,数组长度+1, 新元素之后的所有元素向下移一个位置 。
:DECLARE res;
res := ArrayCalc({1,2,3},"MAX");
usrmes("res", res);
//Returns: 3
ArrayCalc({1,2,3},"SUM")
//Returns: 6
ArrayCalc({1,2,3},"AVG")
//Returns: 2
ArrayCalc({1,2,3},”RESIZE”,4)
//Returns: {1, 2, 3, NIL}
:DECLARE sortArr;
sortArr := {1,2,3};
ArrayCalc(sortArr,"INS",,3);
// {1,2,NIL,3}
usrmes("sortArr=", sortArr);
:DECLARE a3;
a3 := {1,2,3};
ArrayCalc(a3,"FILL",'TRUE',2,2);
//{1,TRUE,TRUE}
usrmes("a3 = ", a3);
:DECLARE copyArr;
copyArr := ArrayNew(3);
/*copyArr := ArrayCalc({3,4,5}, "COPY");*/
//{3,4,5}
copyArr := ArrayCalc({3,4,5}, "COPY", ,1,2);
/*{3,4};*/
usrmes("copyArr=", copyArr);
七、Ascan() 函数
用于扫描数组,直到找到一个值或代码块返回TRUE。
Ascan(Target Array, Search Value, Start, Count)
:DECLARE MyArray, res;
MyArray := {"John", "Sue", "Dave"};
res := Ascan(MyArray, "Sue");
//2
usrmes("res = ", res);
八、BuildArray()函数
用于从带分隔符的字符串中创建数组。(默认是,分隔符)
BuildArray(String, <CR-Flag>, <Separator>, <U-Flag>)
示例:
:DECLARE MyArray, MyArray2;
MyArray := BuildArray("Jim, John, Mary, Sue, Steve,");
//Jim
usrmes(MyArray[1]);
MyArray2 := BuildArray("Jim-John-Mary-Sue-Steve",,'-');
// John
usrmes(MyArray2[2]);
九、BuildArray2()函数
创建二维数组
BuildArray(String, LineSeparator, ColSeparator)LineSeparator:行分隔符,默认是';'ColSeparator:列分隔符,默认是','
:DECLARE MyArray3;
MyArray3 := BuildArray2( "Barry, George"+Chr(59)+"Male, Male", Chr(59), "," );
// Barry
usrmes("MyArray3[1][1]=", MyArray3[1][1]);
注意:
分号用Chr(59)格式!
因为StarLIMS编译器将一个显式的分号解释为代码行的末尾。
十、BuildString() 函数
用于从数组中创建带分隔符的字符串。
BuildString(Array, <Start>, <Count>, <Delimitator>)
:DECLARE aArray, sString;
aArray := {"Elian", "Grace", "Barry", "Gelu"};
sString := BuildString(aArray,2,2);
// Grace,Barry
usrmes(sString);
sString2 := BuildString(aArray);
// Elian,Grace,Barry,Gelu
usrmes("sString2", sString2);
十一、BuildString2() 函数
用于从二维数组中创建以分号和逗号分隔的字符串。
BuildString2(array, <LineSeparator>, <ColSeparator>)
:DECLARE sString;
sString := BuildString2({{"Grace","Barry","Charley"},{"Yes","Yes","No"}});
// Grace,Barry,Charley;Yes,Yes,No
usrmes(sString);
十二、CompArray() 函数
用于比较两个数组以匹配内容。这将比较两个数组,并检查以确保结构相同,所有匹配元素是相等的。
CompArray(Array1, Array2)
:DECLARE aArray1, aArray2, aArray3;
aArray1 := {"aa", "bb", "cc"};
aArray2 := {"aa", "bb", "dd"};
aArray3 := {"aa", "bb", "cc"};
// .F.
usrmes(CompArray(aArray1, aArray2));
// .T.
usrmes(CompArray(aArray1, aArray3));
十三、DelArray() 函数
用于从数组中删除元素。数组长度-1,删除元素后的所有元素将被向上移动一个位置。
DelArray(Array, Position Number)
:DECLARE aArray1, aArray2, aArray3;
aArray1 := {"Today", Today(), 3.14, "Tomorrow", Today()+1};
// {Today,05/28/2024,3.14,Tomorrow,05/29/2024}
usrmes(aArray1);
DelArray(aArray1, 3);
{Today,05/28/2024,Tomorrow,05/29/2024}
usrmes(aArray1);
十四、ExtractCol() 函数
用于提取指定数组的某一列,并将其作为单维(向量)数组返回。
ExtractCol(Array, Column num)
:DECLARE aArray1;
aArray1 := ExtractCol({{1,2,3},{3,4,3},{3,5,6}}, 1);
// {1,3,3}
usrmes(aArray1);
十五、SortArray()函数
将数组按照升序排序。
:DECLARE aArray1;
aArray1 := {23,2,14,16,44,8};
SortArray(aArray1);
// {2,8,14,16,23,44}
usrmes(aArray1);