object script array => size - element scount
Hi,
I was wondering if there is any way to count elements from an array. I guess not as an array could be multi-dimensional and that would be a problem to return the number of elements inside the array.
As an example:
Information about arrays: https://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KE…
Thanks
Comments
If you want to count (or otherwise traverse) all the elements in a multidimensional array, you can use $Query - here's a sample with method that does that:
ClassMethod Run() { Set a(1) = "blue" Set a(1,3,5,2) = "navy" Set a(2) = "red" Set a(2,2) = "crimson" Set a(3) = "yellow" Write ..Count(.a) } ClassMethod Count(ByRef pArray) As %Integer [ PublicList = pArray ] { Set count = 0 Set ref = $Query(pArray("")) While (ref '= "") { Set count = count + 1 Set ref = $Query(@ref) } Quit count }
If you're sure that all your keys are consecutive integers, then use $order to get the last element, which would also be a count of them:
write $order(a(""),-1)Also there is a common approach to use the root as a counter of the one-level array using $seq(uence) or $I(ncrement). E.g.
Class Test.Arrays {
ClassMethod ArrayExample()
{
set a($seq(a))="blue"
set a($seq(a))="red"
set a($seq(a))="yellow"
write a,! // will return 3
zwrite a // will out the full array to the device
}
}And if we execute the following in terminal you'll get:
USER>d ##class(Test.Arrays).ArrayExample()
3
a=3
a(1)="blue"
a(2)="red"
a(3)="yellow"
Also see the good article on $seq vs $I by @Alexander.Koblov
HTH
Thanks for all your answers...very helpful indeed!