SSL函数01-数组函数Array Functions

一、数组的初始化

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将元素值作为参数传递给代码块。
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);
  • 28
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值