第二十六章 Caché 函數大全 $LIST 函數
返回或替換列表中的元素。
大綱
$LIST(list,position,end)
$LI(list,position,end)
SET $LIST(list,position,end)=value
SET $LI(list,position,end)=value
參數
- list 計算結果爲有效列表的表達式。由於列表包含編碼,因此必須使用
$LISTBUILD
或$LISTFROMSTRING
創建列表,或者使用$LIST
從另一個列表中提取列表。在SET $LIST
語法中,list必須是變量或多維屬性。 - position 可選—整數代碼,用於指定列表中從中檢索子列表的起始位置。允許的值爲
n
(從列表開頭的整數),*
(列表中的最後一個元素)和* -n
(從列表末尾開始的相對偏移量)。SET $LIST
語法還支持* + n
(要追加到列表末尾的元素的相對偏移整數計數)。因此,列表中的第一個元素爲1,第二個元素爲2,列表中的最後一個元素爲*
,倒數第二個元素爲* -1
。如果省略position,則默認爲1。-1可以在較舊的代碼中使用,以指定列表中的最後一個元素。反對使用-1時,不應與*
,*-n
或* + n
相對偏移語法結合使用。 - end 可選—一個整數代碼,用於指定列表的子列表的結束位置。可以是一個正整數,它指定從列表開頭算起的位置數,也可以是一個符號代碼,從列表末算起。與位置一起使用,並使用與位置相同的代碼值。如果省略,則僅返回由position指定的單個元素。
描述
$LIST
可以通過兩種方式使用:
- 從列表中返回一個或多個元素。這使用
$LIST(list,position,end)
語法。它通過從列表的開頭或結尾開始的偏移量定位元素。它返回單個元素作爲字符串。它返回一系列元素作爲列表。 - 替換列表中的一個或多個元素。替換元素的長度可以與原始元素相同,更長或更短。這使用
SET $LIST(list,position,end)= value
語法。
返回列表元素
$LIST
返回列表中的單個元素或元素範圍。返回的元素取決於所使用的參數。
-
$LIST(list
)以字符串形式返回list中的第一個元素。 -
$LIST(list,position)
以字符串形式返回由position指定的list元素。指定的位置不能是列表末尾以外的正整數,也不能是列表開頭前的負整數。 -
$LIST(list,position,end)
返回一個“子列表”(編碼列表字符串),其中包含從列表中檢索到的一系列元素。範圍是從指定的開始位置到指定的結束位置(含)。如果position和end指定相同的元素,則$LIST
將此元素作爲編碼列表返回。
指定的位置不能是列表末尾以外的正整數,也不能是列表開頭前的負整數。指定的末尾可以是列表末尾以外的正整數,但僅返回現有的列表元素。不執行元素填充。
注意:不應在循環結構中使用$LIST
返回多個連續的元素值。儘管這可以工作,但效率非常低,因爲$LIST
必須在每次迭代的開始就計算該列表。$LISTNEXT
函數是返回多個連續元素值的更有效的方法。
參數
list
包含一個或多個元素的編碼列表字符串。可以使用$LISTBUILD
或$LISTFROMSTRING
創建列表,也可以使用$LIST
函數從另一個列表中提取列表。 (空字符串(“”
)和某些$CHAR
非打印字符組合,例如$CHAR(1)
,$CHAR(2,1
)和$CHAR(3,1,asciicode)
也可以返回已編碼的空字符或單元素列表。)。
返回一個或多個元素時,列表可以是變量或對象屬性。
當$LIST
與等號左側的SET
一起使用以替換一個或多個元素時,list可以是變量或多維屬性引用;它不能是非多維對象屬性。
以下是有效的列表參數:
/// d ##class(PHA.TEST.Function).LIST()
ClassMethod LIST()
{
SET myList = $LISTBUILD("Red","Blue","Green","Yellow")
WRITE !,$LIST(myList,2) ; prints Blue
SET subList = $LIST(myList,2,4)
WRITE !,$LIST(subList,2) ; prints Green
}
DHC-APP>d ##class(PHA.TEST.Function).LIST()
Blue
Green
在下面的示例中,subList
不是有效的列表參數,因爲它是作爲普通字符串而不是編碼的列表字符串返回的單個元素:
/// d ##class(PHA.TEST.Function).LIST1()
ClassMethod LIST1()
{
SET myList = $LISTBUILD("Red","Blue","Green","Yellow")
SET subList = $LIST(myList,2)
WRITE $LIST(subList,1)
}
DHC-APP>d ##class(PHA.TEST.Function).LIST1()
WRITE $LIST(subList,1) }
^
<LIST>zLIST1+3^PHA.TEST.Function.1
在SET $LIST
語法格式中,list不能是非多維對象屬性。
position
要返回(或替換)的列表元素的位置(元素計數)。單個元素作爲字符串返回。列表元素從1開始計數。如果省略position,則$LIST
返回第一個元素。
- 如果position是一個正整數,則
$LIST
從列表的開頭開始計數元素。如果position大於列表中的元素數,則Caché發出錯誤。 - 如果position爲
*
(星號),則$LIST
返回列表中的最後一個元素。 - 如果position爲
* -n
(星號後跟負數),則$LIST
通過從列表末尾向後偏移來計數元素。因此,*-0
是列表中的最後一個元素,*-1
是倒數第二個列表元素(從末尾偏移1)。如果位置相對偏移計數等於列表中的元素數(因此指定第0個元素),則Caché發出錯誤。如果位置相對偏移計數大於列表中的元素數,則Caché發出<RANGE>
錯誤。 - 僅適用於
SET $LIST
語法—如果position爲* + n
(星號後跟一個正數),則SET $LIST
會在列表末尾附加偏移量。因此,* + 1
在列表末尾附加一個元素,* + 2
在列表末尾兩個位置附加一個元素,並以空字符串元素填充。 - 如果position爲0或-0,則Caché發出
<NULL VALUE>
錯誤。
如果指定了end參數,則position指定元素範圍中的第一個元素。一定範圍的元素總是作爲編碼列表字符串返回。即使僅返回一個元素(當位置和結尾爲相同數字時),該值也作爲編碼列表字符串返回。因此,$LIST(x,2)
是與$LIST(x,2,2)
相同的元素,但數據值不同。
end
最後一個元素在一系列元素中的位置,指定爲整數。必須指定位置以指定結束。如果end是小數,則將其截斷爲整數部分。
指定end時,返回的值是編碼列表字符串。由於這種編碼,這樣的字符串只能由其他$LIST
函數處理。
- position < end: 如果end和position是正整數,而position < end
$LIST
返回一個編碼的子列表,其中包含指定的元素列表,包括position和end元素。如果position爲0或1,則子列表從列表中的第一個元素開始。如果end大於list中的元素數,則$LIST
返回一個編碼的子列表,該子列表包含從位置到列表末尾的所有元素。如果end是* -n
,則position可以是正整數,也可以是大於或等於此結束位置的* -n
值。因此,$LIST(fourlist,*-1,*)
,$LIST(fourlist,*-3,*-2)
,$LIST(fourlist,2,*-1)
都是有效的子列表。 - position = end:如果end和position計算爲同一元素,則
$LIST
返回包含該單個元素的編碼子列表。例如,在具有四個元素的列表中,結尾和位置可以相同($LIST(fourlist,2,2
),$LIST(fourlist,*,*)
或$LIST(fourlist,*-2,*-2 )
),也可以指定相同的元素($LIST(fourlist,4,*)
,$LIST(fourlist,3,*-1)
)。 - position > end:如果position> end,則
$LIST
返回空字符串(“”
)。例如,在具有四個元素的列表中,$LIST(fourlist,3,2)
,$LIST(fourlist,7,*)
或$LIST(fourlist,*-1,*-2)
都返回空字符串。 - position=0, 和 end: 如果指定了end,並且位置爲零(0)或值爲零的負偏移量,則位置0等於1。因此,如果end得出的元素位置大於零,則
$LIST
返回包含以下內容的編碼子列表:從位置1到結束位置的元素。如果end也求值爲零,則$LIST
返回空字符串(“”
),因爲position> end。 - 僅適用於
SET $LIST
語法—如果end爲* + n
(星號後跟一個正數),則SET $LIST
會在列表末尾附加偏移量的元素範圍。如果position爲* + n
,則SET $LIST
會附加一個值範圍。如果position是一個正整數,或者* -n SET $LIST
都替換並附加值。要替換最後一個元素並追加元素,請指定SET $LIST(mylist,* + 0,* + n)
。如果指定範圍的開始超出列表的末尾,則根據需要用空字符串元素填充列表。如果end大於提供的值範圍,則不執行尾隨填充。
不推薦使用–1
在較舊的代碼中,位置或最終值爲-1表示列表中的最後一個元素。值-1不能與*
,* + n
或* -n
語法一起使用。
指定* -n
和* + n
參數值
使用變量指定* -n
或* + n
時,必須始終在參數本身中指定星號和符號字符。
以下是* -n
的有效規格:
/// d ##class(PHA.TEST.Function).LIST2()
ClassMethod LIST2()
{
SET count=2
SET alph=$LISTBUILD("a","b","c","d")
WRITE $LIST(alph,*-count)
}
DHC-APP>d ##class(PHA.TEST.Function).LIST2()
b
/// d ##class(PHA.TEST.Function).LIST3()
ClassMethod LIST3()
{
SET count=-2
SET alph=$LISTBUILD("a","b","c","d")
WRITE $LIST(alph,*+count)
}
DHC-APP>d ##class(PHA.TEST.Function).LIST3()
b
以下是* + n
的有效規範:
/// d ##class(PHA.TEST.Function).LIST4()
ClassMethod LIST4()
{
SET count=2
SET alph=$LISTBUILD("a","b","c","d")
SET $LIST(alph,*+count)="F"
WRITE $LISTTOSTRING(alph,"^",1)
}
DHC-APP>d ##class(PHA.TEST.Function).LIST4()
a^b^c^d^^F
這些參數值內允許使用空格。
$LIST
錯誤
以下$LIST
參數值會產生錯誤:
- 如果list參數的求值結果無效,則
$LIST
生成錯誤。可以使用$LISTVALID
函數來確定列表是否有效。 - 如果list參數求值爲包含空值的有效列表,或將列表和空值連接在一起,則
$LIST(list)
語法會生成錯誤,因爲此語法試圖將空值作爲字符串返回。以下所有都是有效列表(根據$LISTVALID
),其中$LIST
會爲其生成<NULL VALUE>
錯誤:
/// d ##class(PHA.TEST.Function).LIST5()
ClassMethod LIST5()
{
// 以下均會發生錯誤
WRITE $LIST(""),!
WRITE $LIST($LB()),!
WRITE $LIST($LB(UndefinedVar)),!
WRITE $LIST($LB(,))
WRITE $LIST($LB()_$LB("a","b","c"))
}
DHC-APP>d ##class(PHA.TEST.Function).LIST5()
WRITE $LIST(""),!
^
<NULL VALUE>zLIST5+1^PHA.TEST.Function.1
如果$LIST(list,position)
語法position參數指定一個null(不存在)元素,則$LIST
會生成一個錯誤,因爲此語法試圖將null值作爲字符串返回:
/// d ##class(PHA.TEST.Function).LIST6()
ClassMethod LIST6()
{
SET mylist=$LISTBUILD("A",,"C")
ZZDUMP $LIST(mylist,2) ; generates a <NULL VALUE> error
}
DHC-APP>d ##class(PHA.TEST.Function).LIST6()
ZZDUMP $LIST(mylist,2) ; generates a <NULL VALUE> error
^
<NULL VALUE>zLIST6+2^PHA.TEST.Function.1
/// d ##class(PHA.TEST.Function).LIST7()
ClassMethod LIST7()
{
SET mylist2=$LISTBUILD("A","B","C")
WRITE $LIST(mylist2,4) ; generates a <NULL VALUE> error
}
DHC-APP 2d1>d ##class(PHA.TEST.Function).LIST7()
WRITE $LIST(mylist2,4) ; generates a <NULL VALUE> error
^
<NULL VALUE>zLIST7+2^PHA.TEST.Function.1
- 如果
$LIST(list,position)
語法將位置參數指定爲0,或者將負偏移量指定爲第0個元素,則$LIST將生成錯誤。如果指定了end,則0爲有效位置值,並解析爲1。 - 如果position或end參數的
*-n
值指定的n
值大於list中元素位置的數量,則$LIST
生成錯誤。
/// d ##class(PHA.TEST.Function).LIST8()
ClassMethod LIST8()
{
SET list2=$LISTBUILD("Brown","Black")
WRITE $LIST(list2,*-2) ; generates a <NULL VALUE> error
WRITE $LIST(list2,*-3) ; generates a <RANGE> error
}
DHC-APP>d ##class(PHA.TEST.Function).LIST8()
WRITE $LIST(list2,*-2) ; generates a <NULL VALUE> error
^
<NULL VALUE>zLIST8+2^PHA.TEST.Function.1
DHC-APP 2d1>d ##class(PHA.TEST.Function).LIST8()
WRITE $LIST(list2,*-3) ; generates a <RANGE> error
^
<RANGE>zLIST8+3^PHA.TEST.Function.1
因爲$LISTLENGTH(“”)
爲0,所以* -1
或更大的位置或結尾將導致錯誤:
DHC-APP>WRITE $LIST("",*-0)
WRITE $LIST("",*-0)
^
<NULL VALUE>
DHC-APP>WRITE $LIST("",*-1)
WRITE $LIST("",*-1)
^
<RANGE>
DHC-APP>WRITE $LIST("",0,*-1)
- 如果position參數或end參數的值小於-1,則
$LIST
生成錯誤。
使用SET $LIST
替換元素
- 可以使用
SET $LIST(list,position)
刪除元素,替換元素的值或將元素追加到列表中。在此兩參數形式中,您將新元素值指定爲字符串。 - 可以使用
SET $LIST(list,position,end)
刪除一個或多個元素,替換一個或多個元素值,或將一個或多個元素附加到列表中。在此三參數形式中,必須指定新元素值作爲編碼列表。
當$LIST
與等號左側的SET
一起使用時,list可以是有效的變量名。如果變量不存在,則SET $LIST
對其進行定義。 list參數也可以是多維屬性引用;它不能是非多維對象屬性。嘗試在非多維對象屬性上使用SET $LIST
會導致<OBJECT DISPATCH>
錯誤。
如果函數使用相對偏移語法,則不能將SET(a,b,c,...)= value
語法與等號左側的$LIST(或$PIECE或$EXTRACT)
一起使用:*
表示結尾一個字符串,*-n
或* + n
代表距字符串末尾的相對偏移量。必須改爲使用SET a = value
,b = value
,c = value
,...語法。
還可以使用$LISTUPDATE
替換列表中的一個或多個元素,或按元素位置將元素追加到列表中。 $LISTUPDATE
替換列表元素,對每個元素替換執行布爾測試。與SET $LIST
不同,$LISTUPDATE
不會修改初始列表,而是返回帶有指定元素替換的該列表的副本。
兩參數運算
可以執行以下兩個參數操作。注意,兩參數運算將元素值指定爲字符串。將元素值指定爲列表會在列表中創建一個子列表。
- 用一個新值替換一個元素值:
/// w ##class(PHA.TEST.Function).listSpace(" a b c 姚 鑫 1 2 3 ")
ClassMethod listSpace(str)
{
s newStr = $lts($lfs(str," "),"")
q newStr
}
DHC-APP>w ##class(PHA.TEST.Function).listSpace(" a b c 姚 鑫 1 2 3 ")
abc姚鑫123
- 刪除元素值(這會將值設置爲null字符串;它不會刪除元素位置):
SET $LIST(fruit,2)=""
- 將元素追加到列表。可以使用
* + n
語法附加到列表的末尾,或附加到列表末尾的位置。SET $LIST
根據需要插入空值元素以填充到指定位置:
SET $LIST(fruit,*+1)="plum"
- 用元素的子列表替換一個元素:
SET $LIST(fruit,3)=$LISTBUILD("orange","banana")
三參數運算
可以執行以下三參數(範圍)操作。請注意,即使指定單個元素值,範圍操作也將元素值指定爲列表。
- 用幾個元素替換一個元素:
SET $LIST(fruit,3,3)=$LISTBUILD("orange","banana")
- 用相同數量的新值替換一系列元素值:
SET $LIST(fruit,2,3)=$LISTBUILD("orange","banana")
- 用更多或更少數量的新值替換一系列元素值:
SET $LIST(fruit,2,3)=$LISTBUILD("orange","banana","peach")
- 刪除一系列元素值(這會將元素值設置爲null字符串;它不會刪除元素位置):
SET $LIST(fruit,2,3)=$LISTBUILD("","")
- 刪除一系列元素值及其位置:
SET $LIST(fruit,2,3)=""
- 將一系列元素添加到列表中。可以使用
* + n
語法附加到列表的末尾或列表末尾的位置。SET $LIST
根據需要插入空字符串值元素以填充到指定位置:
SET $LIST(fruit,*+1,*+2)=$LISTBUILD("plum","pear")
SET $LIST
僅附加指定的元素值。如果結束位置大於指定的元素,則不會創建空的尾隨元素位置。
示例
$LIST
返回元素的示例
以下示例使用$LIST
的2參數形式返回列表元素作爲字符串:
以下兩個$LIST
語句返回“Red”
,即列表中的第一個元素。默認情況下,第一個返回第一個元素,第二個返回第一個元素,因爲position參數設置爲1。該值以字符串形式返回:
/// d ##class(PHA.TEST.Function).LIST9()
ClassMethod LIST9()
{
SET colorlist=$LISTBUILD("Red","Orange","Yellow","Green","Blue","Violet")
WRITE $LIST(colorlist),!
WRITE $LIST(colorlist,1)
}
DHC-APP>d ##class(PHA.TEST.Function).LIST9()
Red
Red
以下兩個$LIST
語句返回“Orange”
,即列表中的第二個元素。第一個從列表的開頭算起,第二個從列表的末尾算起。該值以字符串形式返回:
/// d ##class(PHA.TEST.Function).LIST10()
ClassMethod LIST10()
{
SET colorlist=$LISTBUILD("Red","Orange","Yellow","Green","Blue","Violet")
WRITE $LIST(colorlist,2),!
WRITE $LIST(colorlist,*-4)
}
DHC-APP>d ##class(PHA.TEST.Function).LIST10()
Orange
Orange
以下示例使用$LIST
的3參數形式返回一個或多個元素作爲編碼列表字符串。由於列表包含非打印編碼字符,因此必須使用$LISTTOSTRING
將子列表轉換爲可打印的字符串。
以下兩個$LIST
語句返回“Blue”
,即列表中的第五個元素,作爲編碼後的列表字符串。第一個從列表的開頭算起,第二個從列表的末尾算起。由於該元素被指定爲範圍,因此將其檢索爲包含一個元素的列表:
/// d ##class(PHA.TEST.Function).LIST11()
ClassMethod LIST11()
{
SET colorlist=$LISTBUILD("Red","Orange","Yellow","Green","Blue","Violet")
WRITE $LISTTOSTRING($LIST(colorlist,5,5))
WRITE $LISTTOSTRING($LIST(colorlist,*-1,*-1))
}
DHC-APP>d ##class(PHA.TEST.Function).LIST11()
BlueBlue
下面的示例返回“Red Orange Yellow”
,這是一個三元素的列表字符串,從列表中的第一個元素開始,以第三個元素結束:
DHC-APP>SET colorlist=$LISTBUILD("Red","Orange","Yellow","Green","Blue","Violet")
DHC-APP>WRITE $LISTTOSTRING($LIST(colorlist,1,3))
Red,Orange,Yellow
以下示例返回“ Green Blue Violet”
,這是一個三元素的列表字符串,從列表中的第四個元素開始,到最後一個元素結束:
DHC-APP>SET colorlist=$LISTBUILD("Red","Orange","Yellow","Green","Blue","Violet")
DHC-APP>WRITE $LISTTOSTRING($LIST(colorlist,4,*))
Green,Blue,Violet
以下示例從屬性返回列表元素:
/// d ##class(PHA.TEST.Function).LIST12()
ClassMethod LIST12()
{
SET cfg=##class(%iKnow.Configuration).%New("Trilingual",1,$LB("en","ch","es"))
WRITE $LIST(cfg.Languages,2)
}
使用SET $LIST
替換,刪除或附加元素的示例
下面的示例顯示SET $LIST
替換第二個元素:
/// d ##class(PHA.TEST.Function).LIST13()
ClassMethod LIST13()
{
SET fruit=$LISTBUILD("apple","onion","banana","pear")
WRITE !,$LISTTOSTRING(fruit,"/")
SET $LIST(fruit,2)="orange"
WRITE !,$LISTTOSTRING(fruit,"/")
}
DHC-APP>d ##class(PHA.TEST.Function).LIST13()
apple/onion/banana/pear
apple/orange/banana/pear
下面的示例顯示SET $LIST
替換第二和第三個元素:
/// d ##class(PHA.TEST.Function).LIST14()
ClassMethod LIST14()
{
SET fruit=$LISTBUILD("apple","potato","onion","pear")
WRITE !,$LISTTOSTRING(fruit,"/")
SET $LIST(fruit,2,3)=$LISTBUILD("orange","banana")
WRITE !,$LISTTOSTRING(fruit,"/")
}
DHC-APP>d ##class(PHA.TEST.Function).LIST14()
apple/potato/onion/pear
apple/orange/banana/pear
下面的示例顯示SET $LIST
用四個元素替換第二個和第三個元素:
/// d ##class(PHA.TEST.Function).LIST15()
ClassMethod LIST15()
{
SET fruit=$LISTBUILD("apple","potato","onion","pear")
WRITE !,$LISTTOSTRING(fruit,"/")
SET $LIST(fruit,2,3)=$LISTBUILD("orange","banana","peach","tangerine")
WRITE !,$LISTTOSTRING(fruit,"/")
}
DHC-APP>d ##class(PHA.TEST.Function).LIST15()
apple/potato/onion/pear
apple/orange/banana/peach/tangerine/pear
以下示例顯示SET $LIST
將元素追加到列表的末尾:
/// d ##class(PHA.TEST.Function).LIST16()
ClassMethod LIST16()
{
SET fruit=$LISTBUILD("apple","orange","banana","peach")
WRITE $LL(fruit)," ",$LISTTOSTRING(fruit,"/",1),!
SET $LIST(fruit,*+1)="pear"
WRITE $LL(fruit)," ",$LISTTOSTRING(fruit,"/",1)
}
DHC-APP>d ##class(PHA.TEST.Function).LIST16()
4 apple/orange/banana/peach
5 apple/orange/banana/peach/pear
下面的示例顯示SET $LIST
在列表末尾的三個位置附加一個元素:
/// d ##class(PHA.TEST.Function).LIST17()
ClassMethod LIST17()
{
SET fruit=$LISTBUILD("apple","orange","banana","peach")
WRITE $LL(fruit)," ",$LISTTOSTRING(fruit,"/",1),!
SET $LIST(fruit,*+3)="tangerine"
WRITE $LL(fruit)," ",$LISTTOSTRING(fruit,"/",1)
}
DHC-APP>d ##class(PHA.TEST.Function).LIST17()
4 apple/orange/banana/peach
7 apple/orange/banana/peach///tangerine
以下四個示例顯示了使用* -n
語法的SET $LIST
,以元素從列表末尾的偏移量替換元素。請注意,SET $LIST(x,*-n)
和SET $LIST(x,n,*-n
)執行不同的操作:SET $LIST(x,*-n)
替換指定元素的值; SET $LIST( x,n,*-n)
刪除指定範圍的元素,然後追加指定列表。
要將倒數第二個元素替換爲單個值,請使用SET $LIST(x,*-1)
:
/// d ##class(PHA.TEST.Function).LIST18()
ClassMethod LIST18()
{
SET fruit=$LISTBUILD("apple","banana","orange","potato","pear")
WRITE !,"list length is ",$LISTLENGTH(fruit)," "
WRITE $LISTTOSTRING(fruit,"/")
SET $LIST(fruit,*-1)="peach"
WRITE !,"list length is ",$LISTLENGTH(fruit)," "
WRITE $LISTTOSTRING(fruit,"/")
}
DHC-APP>d ##class(PHA.TEST.Function).LIST18()
list length is 5 apple/banana/orange/potato/pear
list length is 5 apple/banana/orange/peach/pear
要從列表末尾按偏移量刪除單個元素,請使用SET $LIST(x,*-n,*-n)=“”
:
/// d ##class(PHA.TEST.Function).LIST19()
ClassMethod LIST19()
{
SET fruit=$LISTBUILD("apple","banana","orange","potato","pear")
WRITE !,"list length is ",$LISTLENGTH(fruit)," "
WRITE $LISTTOSTRING(fruit,"/")
SET $LIST(fruit,*-1,*-1)=""
WRITE !,"list length is ",$LISTLENGTH(fruit)," "
WRITE $LISTTOSTRING(fruit,"/")
}
DHC-APP>d ##class(PHA.TEST.Function).LIST19()
list length is 5 apple/banana/orange/potato/pear
list length is 4 apple/banana/orange/pear
要將單個元素從列表末尾的偏移量替換爲元素列表,請使SET $LIST(x,*-n,*-n)= list
:
/// d ##class(PHA.TEST.Function).LIST20()
ClassMethod LIST20()
{
SET fruit=$LISTBUILD("apple","banana","potato","orange","pear")
WRITE !,"list length is ",$LISTLENGTH(fruit)," "
WRITE $LISTTOSTRING(fruit,"/")
SET $LIST(fruit,*-2,*-2)=$LISTBUILD("peach","plum","quince")
WRITE !,"list length is ",$LISTLENGTH(fruit)," "
WRITE $LISTTOSTRING(fruit,"/")
}
DHC-APP>d ##class(PHA.TEST.Function).LIST20()
list length is 5 apple/banana/potato/orange/pear
list length is 7 apple/banana/peach/plum/quince/orange/pear
要將單個元素替換爲列表末尾的子列表,請使用SET $LIST(x,*-n)= list
:
/// d ##class(PHA.TEST.Function).LIST21()
ClassMethod LIST21()
{
SET fruit=$LISTBUILD("apple","banana","potato","orange","pear")
WRITE !,"list length is ",$LISTLENGTH(fruit)," "
WRITE $LISTTOSTRING(fruit,"/")
SET $LIST(fruit,*-2)=$LISTBUILD("peach","plum","quince")
WRITE !,"list length is ",$LISTLENGTH(fruit)," "
WRITE $LISTTOSTRING(fruit,"/")
}
DHC-APP> d ##class(PHA.TEST.Function).LIST21()
list length is 5 apple/banana/potato/orange/pear
list length is 5 apple/banana/peach�pluquince/orange/pear
下面的示例顯示SET $LIST
從列表中刪除元素,從第三個元素到列表末尾:
/// d ##class(PHA.TEST.Function).LIST22()
ClassMethod LIST22()
{
SET fruit=$LISTBUILD("apple","orange","onion","peanut","potato")
WRITE !,"list length is ",$LISTLENGTH(fruit)," "
WRITE $LISTTOSTRING(fruit,"/")
SET $LIST(fruit,3,*)=""
WRITE !,"list length is ",$LISTLENGTH(fruit)," "
WRITE $LISTTOSTRING(fruit,"/")
}
DHC-APP>d ##class(PHA.TEST.Function).LIST22()
list length is 5 apple/orange/onion/peanut/potato
list length is 2 apple/orange
注意
Unicode
如果一個Unicode字符出現在列表元素中,則整個列表元素將表示爲Unicode(寬)字符。列表中的其他元素不受影響。
以下示例顯示了兩個列表。 y列表由兩個僅包含ASCII字符的元素組成。 z列表由兩個元素組成:第一個元素包含Unicode字符($CHAR(960)= pi
符號);第二個元素包含Unicode字符。第二個元素僅包含ASCII字符。
/// d ##class(PHA.TEST.Function).LIST23()
ClassMethod LIST23()
{
IF $SYSTEM.Version.IsUnicode() {
SET y=$LISTBUILD("ABC"_$CHAR(68),"XYZ")
SET z=$LISTBUILD("ABC"_$CHAR(960),"XYZ")
WRITE !,"The ASCII list y elements: "
ZZDUMP $LIST(y,1)
ZZDUMP $LIST(y,2)
WRITE !,"The Unicode list z elements: "
ZZDUMP $LIST(z,1)
ZZDUMP $LIST(z,2)
}
ELSE {WRITE "此示例需要Caché的Unicode安裝"}
}
DHC-APP>d ##class(PHA.TEST.Function).LIST23()
The ASCII list y elements:
0000: 41 42 43 44 ABCD
0000: 58 59 5A XYZ
The Unicode list z elements:
0000: 0041 0042 0043 03C0 ABCπ
0000: 58 59 5A XYZ
請注意,Caché完全使用寬Unicode字符對z的第一個元素進行編碼。 z的第二個元素不包含Unicode字符,因此Caché使用狹窄的ASCII字符對其進行編碼。
$LIST
與$EXTRACT
和$PIECE
相比
$LIST
通過從列表的開頭(或結尾)開始計數元素(而非字符)來確定編碼列表中的元素。
$EXTRACT
通過從字符串的開頭(或結尾)開始計數字符來確定子字符串。 $EXTRACT
將普通字符串作爲輸入。
$PIECE
通過計算字符串中用戶定義的定界符來確定子字符串。 $PIECE
將包含要用作定界符的一個或多個字符實例的普通字符串作爲輸入。
$LIST
不能用於普通字符串。 $PIECE
和$EXTRACT
不能用於編碼列表。