第三十六章 Caché 函數大全 $LISTUPDATE 函數
通過可選地替換指定的列表元素或元素序列來更新列表。
大綱
$LISTUPDATE(list,position,bool:val...)
$LU(list,position,bool:val...)
參數
- list 任何計算結果爲列表的表達式。可以使用
$LISTBUILD
或$LISTFROMSTRING
創建列表,或使用$LIST
從另一個列表中提取列表。空字符串(“”
)也被視爲有效列表。 - position 一個正整數,指定要在列表中更新的位置(從1開始)。如果position大於列表中元素的數量,則
$LISTUPDATE
會追加該元素,並在必要時進行填充。 - bool 可選—一個布爾變量,指定是否更新指定的列表元素。如果省略,則bool默認爲1,導致此元素被更新。
- value 用於在指定位置更新列表的值。可以指定以逗號分隔的值參數列表或bool:value對參數的任意組合。
描述
$LISTUPDATE
返回通過按位置替換或添加一個或多個列表元素而更新的列表的副本。該位置指定了列表中開始更新元素的位置。從此位置開始,元素將順序更新。該位置可以大於列表中元素的數量。如果是這樣,則將其他null元素添加到列表(如果需要),以在指定位置插入新元素。請注意,位置必須爲正整數; $LISTUPDATE
不能在列表的開頭插入新元素。設置位置= 0不執行任何操作。 $LISTUPDATE
也不能指定列表結尾,除非從列表開頭開始按位置計數。
$ISTUPDATE
可以指定一個或多個bool:value對。多個bool:value對用逗號分隔。這些bool:value對從position元素開始更新順序元素。如果bool = 1,則Caché用值更新該元素。如果bool = 0,則Caché不會更新該元素,而是繼續執行下一個元素。
不需要按bool:value對序列進行更新的順序元素,不必指定;它們可以用佔位符逗號表示。 bool:參數對於每個值都是可選的;如果省略,則默認爲1。如果省略bool,也將省略冒號(:
)分隔符。因此,以下是指定bool:value對的允許方式:
- 要更新的元素:1:“newval”或“newval”(布爾默認爲1)。
- 不更新的元素:0:“newval”或佔位符逗號。
$LISTUPDATE
通常用於返回現有列表的更新版本。可以使用$LISTUPDATE
通過指定list =“”
來創建列表。
還可以使用SET $LIST
更新現有列表中的一個或多個元素。
示例
下面的示例將位置2處的list元素替換爲指定值:
/// d ##class(PHA.TEST.Function).LISTUPDATE()
ClassMethod LISTUPDATE()
{
SET caps=1
SET mylist = $LISTBUILD("Red","White","Blue")
SET newlist = $LISTUPDATE(mylist,2,caps:"WHITE1")
ZWRITE newlist
}
DHC-APP>d ##class(PHA.TEST.Function).LISTUPDATE()
newlist=$lb("Red","WHITE1","Blue")
以下示例未使用指定的值替換位置2處的列表元素:
/// d ##class(PHA.TEST.Function).LISTUPDATE1()
ClassMethod LISTUPDATE1()
{
SET caps=0
SET mylist = $LISTBUILD("Red","White","Blue")
SET newlist = $LISTUPDATE(mylist,2,caps:"WHITE1")
ZWRITE newlist
}
DHC-APP>d ##class(PHA.TEST.Function).LISTUPDATE1()
newlist=$lb("Red","White","Blue")
以下示例將位置2處的list元素替換爲null:
/// d ##class(PHA.TEST.Function).LISTUPDATE2()
ClassMethod LISTUPDATE2()
{
SET caps=1
SET mylist = $LISTBUILD("Red","White","Blue")
SET newlist = $LISTUPDATE(mylist,2,caps:"")
ZWRITE newlist
}
DHC-APP>d ##class(PHA.TEST.Function).LISTUPDATE2()
newlist=$lb("Red","","Blue")
下面的示例在列表7的位置附加指定的值,並在位置5和6處填充空元素:
/// d ##class(PHA.TEST.Function).LISTUPDATE3()
ClassMethod LISTUPDATE3()
{
SET bool=1
SET mylist = $LISTBUILD("Red","Orange","Yellow","Green")
SET newlist = $LISTUPDATE(mylist,7,bool:"Purple")
ZWRITE newlist
}
DHC-APP>d ##class(PHA.TEST.Function).LISTUPDATE3()
newlist=$lb("Red","Orange","Yellow","Green",,,"Purple")
下面的示例不將列表添加到指定位置的位置7。返回未更改的列表,不填充任何空元素:
/// d ##class(PHA.TEST.Function).LISTUPDATE4()
ClassMethod LISTUPDATE4()
{
SET bool=0
SET mylist = $LISTBUILD("Red","Orange","Yellow","Green")
SET newlist = $LISTUPDATE(mylist,7,bool:"Purple")
ZWRITE newlist
}
DHC-APP>d ##class(PHA.TEST.Function).LISTUPDATE4()
newlist=$lb("Red","Orange","Yellow","Green")
以下三個示例在功能上都是相同的。每個元素替換位置2和4的元素,並在位置7附加一個新元素。它不替換元素3和5。元素6被創建爲空元素:
/// d ##class(PHA.TEST.Function).LISTUPDATE5()
ClassMethod LISTUPDATE5()
{
SET mylist = $LISTBUILD("Red","Orange","Yellow","Green","Blue")
SET newlist = $LISTUPDATE(mylist,2,1:"ORANGE",0:"YELLOW",
1:"GREEN",0:"BLUE",
0:"INDIGO",1:"VIOLET")
ZWRITE newlist
}
DHC-APP>d ##class(PHA.TEST.Function).LISTUPDATE5()
newlist=$lb("Red","ORANGE","Yellow","GREEN","Blue",,"VIOLET")
此處,僅在bool參數爲0時指定它:
/// d ##class(PHA.TEST.Function).LISTUPDATE6()
ClassMethod LISTUPDATE6()
{
SET mylist = $LISTBUILD("Red","Orange","Yellow","Green","Blue")
SET newlist = $LISTUPDATE(mylist,2,"ORANGE",0:"YELLOW",
"GREEN",0:"BLUE",
0:"INDIGO","VIOLET")
ZWRITE newlist
}
DHC-APP>d ##class(PHA.TEST.Function).LISTUPDATE6()
newlist=$lb("Red","ORANGE","Yellow","GREEN","Blue",,"VIOLET")
在這裏,佔位符逗號用於跳過未更新的元素:
/// d ##class(PHA.TEST.Function).LISTUPDATE7()
ClassMethod LISTUPDATE7()
{
SET mylist = $LISTBUILD("Red","Orange","Yellow","Green","Blue")
SET newlist = $LISTUPDATE(mylist,2,"ORANGE",,"GREEN",,,"VIOLET")
ZWRITE newlist
}
DHC-APP>d ##class(PHA.TEST.Function).LISTUPDATE7()
newlist=$lb("Red","ORANGE","Yellow","GREEN","Blue",,"VIOLET")
全爲1時:
/// d ##class(PHA.TEST.Function).LISTUPDATE8()
ClassMethod LISTUPDATE8()
{
SET mylist = $LISTBUILD("Red","Orange","Yellow","Green","Blue")
SET newlist = $LISTUPDATE(mylist,2,"ORANGE1","YELLOW2",
"GREEN3","BLUE4",
"INDIGO5","VIOLET6")
ZWRITE newlist
}
DHC-APP>d ##class(PHA.TEST.Function).LISTUPDATE8()
newlist=$lb("Red","ORANGE1","YELLOW2","GREEN3","BLUE4","INDIGO5","VIOLET6")