count non-zero array elements

is there a short cut or easy way to count the number of non-zero elements in an array of doubles?

thanks
bill

No, you’d have to cycle through them and count.

dim cnt as integer
for each d as double in doublesArr
  if d <> 0.0 then cnt = cnt + 1
next d

Should be pretty fast.

Yeah, I knew to do that, I was just hoping there was a one line function that would return the number of positive elements…

The Xojo language is extensible in some ways, so you could write your own using the Extends keyword:

function CountPositives extends dArray() as double as integer
  dim cnt as integer
  for each d as double in dArray
    if d >0 then cnt=cnt+1
   next
   return cnt
end function

You can then use the function in your code using dot notation

  dim d() as double
  dim n as integer
  n = d.CountPositives

This code might be faster:

  dim cnt as integer
  dim thisIndex as integer = doublesArr.IndexOf( 0. )
  while thisIndex <> -1
    cnt = cnt + 1
    if thisIndex = doublesArr.Ubound then
      exit
    else
      thisIndex = doublesArr.IndexOf( 0., thisIndex + 1 )
    end if
  wend
  cnt = doublesArr.Ubound - cnt + 1