文章目录

第三十二章 Caché 函数大全 $LISTLENGTH 函数

返回指定列表中的元素数。

大纲
$LISTLENGTH(list)
$LL(list)

参数

= list 任何计算结果为列表的表达式。可以使用$LISTBUILD$LISTFROMSTRING创建列表,或使用$LIST从另一个列表中提取列表。

描述

$LISTLENGTH返回列表中元素的数量。 $LISTLENGTH会将每个指定的列表位置计为列表元素,无论该位置是否包含数据。

可以使用$LISTVALID函数来确定列表是否为有效列表。如果列表不是有效列表,则系统生成<LIST>错误。

$LISTBUILD创建的“空”列表定义了一个编码列表元素,尽管该列表元素不包含任何数据。因为$LISTLENGTH对列表元素(不包含数据的元素)进行计数,所以“空”列表的$LISTLENGTH计数为1。

空字符串(“”)用于表示一个空列表,该列表不包含任何元素。因为它不包含任何列表元素,所以它的$LISTLENGTH计数为0。

示例

下面的示例返回3,因为列表中有3个元素:

DHC-APP>WRITE $LISTLENGTH($LISTBUILD("Red","Blue","Green"))
3

即使列表中的第二个元素不包含任何数据,以下示例也将返回3:

DHC-APP>WRITE $LISTLENGTH($LISTBUILD("Red",,"Green"))
3

以下示例均返回1。$LISTLENGTH在空列表元素和包含数据的列表元素之间没有区别:

/// d ##class(PHA.TEST.Function).LISTLENGTH()
ClassMethod LISTLENGTH()
{
  WRITE $LISTLENGTH($LB()),!
  WRITE $LISTLENGTH($LB(UndefinedVar)),!
  WRITE $LISTLENGTH($LB("")),!
  WRITE $LISTLENGTH($LB($CHAR(0))),!
  WRITE $LISTLENGTH($LB("John Smith"))
}

下面的示例返回0。$LISTVALID将空字符串视为有效列表,但不包含任何列表元素:

DHC-APP>WRITE $LISTLENGTH("")
0

下面的示例返回3,因为两个占位符逗号表示3个空列表元素:

DHC-APP> WRITE $LISTLENGTH($LB(,,))
3

$LISTLENGTH和串联

串联两个列表总会导致$LISTLENGTH等于列表长度的总和。即使连接空列表或将空字符串连接到列表,也是如此。

以下示例均返回列表长度3:

/// d ##class(PHA.TEST.Function).LISTLENGTH1()
ClassMethod LISTLENGTH1()
{
	WRITE $LISTLENGTH($LB()_$LB("a","b")),!
	WRITE $LISTLENGTH($LB("a")_$LB(UndefinedVar)_$LB("c")),!
	WRITE $LISTLENGTH($LB("")_$LB()_$LB(UndefinedVar)),!
	WRITE $LISTLENGTH(""_$LB("a","b","c")),!
	WRITE $LISTLENGTH($LB("a","b")_""_$LB("c"))
}
DHC-APP>d ##class(PHA.TEST.Function).LISTLENGTH1()
3
3
3
3
3

$LISTLENGTH和嵌套列表

以下示例返回3,因为$LISTLENGTH无法识别嵌套列表中的单个元素,并将其视为单个列表元素:

DHC-APP>WRITE $LISTLENGTH($LB("Apple","Pear",$LB("Walnut","Pecan")))
3

以下示例均返回1,因为$LISTLENGTH仅计算最外面的嵌套列表:

/// d ##class(PHA.TEST.Function).LISTLENGTH2()
ClassMethod LISTLENGTH2()
{
	WRITE $LISTLENGTH($LB($LB($LB()))),!
	WRITE $LISTLENGTH($LB($LB($LB("Fred")))),!
	WRITE $LISTLENGTH($LB($LB("Barney"_$LB("Fred")))),!
	WRITE $LISTLENGTH($LB("Fred"_$LB("Barney"_$LB("Wilma"))))
}
DHC-APP>d ##class(PHA.TEST.Function).LISTLENGTH2()
1
1
1
1