Utility methods for %ListOfObjects. REMARK: Probably this functionality exists already somewhere.... vhLib.Macro 1 %RegisteredObject 1 Listbuild:%List %ListOfDataTypes 1 Listbuild:%List,Delim:%String="," %String 1 List:%ListOfDataTypes %List 1 List:%ListOfDataTypes,Delim:%String="\" %String 1 List:%ListOfDataTypes,IsVisibleKeyIdentification:%String=1 %Stream 1 List:%ListOfDataTypes,Items...:%CacheString 1 Iterator:TECH.Iterator,Delim:%String="\" %String 1 Iterator:TECH.Iterator %Collection.AbstractListOfDT 1 Iterator:TECH.Iterator %List OPGELET : Het resultaat van PiecesToList is een %ListOfDataTypes Dit is anders dan in PiecesToList^vhLib() , want daar is het resultaat een ListBuild. Opgelet dus bij code-rewrite! 1 PieceDelimitedList:%String="",Delim:%String %ListOfDataTypes 1 PieceDelimitedList:%String="",Delim:%String %List Copy the list-items from sourceList into targetList. Returns the targetList. 1 sourceList:%ListOfObjects,targetList:%ListOfObjects="" %ListOfObjects Maakt een diepe copy (2 diep) van een aray. De elementen van de array moeten %RegisteredObjects zijn. 1 Source:%AbstractArray %AbstractArray 1 sourceArray:%ArrayOfDataTypes,targetArray:%ArrayOfDataTypes="" %ArrayOfDataTypes 1 sourceArray:%ArrayOfObjects,targetArray:%ArrayOfObjects="" %ArrayOfObjects 1 sourceList:%ListOfDataTypes,targetList:%ListOfDataTypes="" %ListOfDataTypes Werkt ook voor ListOfObjects en Item een object 1 List:%ListOfDataTypes,Item:%String %Boolean 1 List:%ListOfDataTypes,Item:%String %Boolean 1 Value:%CacheString,List:%CacheString,AllOccurences:%Boolean=0 %Boolean 1 Value:%CacheString,List:%List,AllOccurences:%Boolean=1 %List 1 List:%ListOfDataTypes,Values:%ArrayOfDataTypes Oproepen via set Lijst=##class(TECH.ListUtils).CreateListOfDataTypes("value1","value2","value3", ... 1 ArgItems...:%String %ListOfDataTypes Oproepen via set Lijst=##class(TECH.ListUtils).CreateListOfObjects(obj1,obj2,obj3, ... 1 ArgItems...:%String %ListOfObjects 1 ArgItems...:%String TECH.Iterator [Previously private] 1 list:%AbstractList,mdArgItems:%String 1 List1:%ListOfDataTypes,List2:%ListOfDataTypes %ListOfDataTypes 1 Iterator1:TECH.Iterator,Iterator2:TECH.Iterator %ListOfDataTypes 1 List1:%ListOfDataTypes,List2:%ListOfDataTypes %ListOfDataTypes 1 Iterator1:TECH.Iterator,Iterator2:TECH.Iterator %ListOfDataTypes Maakt unie van twee piece-delimited strings 1 String1:%String,String2:%String,Delim:%String="\" 1 List:%ListOfObjects,Property:%String,Value:%String="" %Boolean 1 List:%ListOfObjects,Method:%String,Value:%String="" %Boolean 1 Value:%String,ItemsIterator:TECH.Iterator,EqualsComparator:TECH.EqualsComparator.EqualsComparator=##class(TECH.EqualsComparator.StringEqualsComparator).%New() %Boolean 1 Lijst:%Collection.AbstractList,Comparator:TECH.Comparator.IComparator %CacheString 1 Lijst:%Collection.AbstractList,Comparator:TECH.Comparator.IComparator %CacheString 1 Lijst:%Collection.AbstractList,Comparator:TECH.Comparator.IComparator,Extrema:TECH.enu.Extrema 1 %CacheString 1 Waarde1:%CacheString,Waarde2:%CacheString,Comparator:TECH.Comparator.IComparator,IsMaximum:%Boolean basic 1 %Boolean 1 Lijst1:%ListOfDataTypes,Lijst2:%ListOfDataTypes %Boolean 1 1 1 1 %ListOfDataTypes 1 MultiDim:TECH.String %ListOfDataTypes 1 MultiParameter...:%CacheString %ListOfDataTypes 1 List:%ListOfDataTypes %ListOfDataTypes 1 Array:%ArrayOfObjects %ListOfObjects 1 List:%Collection.AbstractIterator %ListOfDataTypes 1 List1:%ListOfDataTypes,List2:%ListOfDataTypes %Boolean Werkt ook voor %ArrayOfDataTypes 1 List1:%ListOfDataTypes,List2:%ListOfDataTypes %Boolean 1 List:%ListOfDataTypes,Key:%String="" TECH.KeyValue.List 1 List1:%ListOfDataTypes,List2:%ListOfDataTypes 0 %ListOfDataTypes 1 List1:%ListOfDataTypes,List2:%ListOfDataTypes %ListOfDataTypes 1 IntegerList:%ListOfDataTypes TECH.String 0 { Do ##class(TECH.Algo.Sort.MergeSort).Sort(.IntegerList, ##class(TECH.Comparator.IntegerComparator).%New()) Set ListIt = ##class(TECH.ListIterator).%New(IntegerList) #dim PreviousNumber As TECH.Integer = "" #dim WasConsecutive As %Boolean = $$$False While ListIt.HasNext() { #dim Number As TECH.Integer = ListIt.Next() If PreviousNumber = "" { Set String = Number } Else { If (Number-PreviousNumber)=1 { Set WasConsecutive = $$$True If $$$Not(ListIt.HasNext()) { Set String = String_$$$ConsecutiveSeparator_Number } } ElseIf (Number-PreviousNumber) > 1 { If WasConsecutive { Set String = String_$$$ConsecutiveSeparator_PreviousNumber_$$$NotConsecutiveSeparator_Number } Else { Set String = String_$$$NotConsecutiveSeparator_Number } Set WasConsecutive = $$$False } Else { If $$$Not(ListIt.HasNext()) && WasConsecutive { Set String = String_$$$ConsecutiveSeparator_Number } } } Set PreviousNumber = Number } } Quit String ]]> 1 RangeString:%String %ListOfDataTypes 1 1 Lists...:%ListOfDataTypes %List