第二十六章 Caché 函數大全 $LIST 函數 第二十六章 Caché 函數大全 $LIST 函數 大綱 描述 參數 $LIST錯誤 使用SET $LIST替換元素 示例 注意

第二十六章 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 = valueb = valuec = 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不能用於編碼列表。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章