Skip to main content
Known Participant
Jul 7, 2021 2:23 PM UTC
Solved

Repeat values in an array

I have an array where I would like to replace the zero values with the previous non-zero value.

i.e. convert { 15, 0, 0, 23, 0, 0, 0 } to { 15, 15, 15, 23, 23, 23, 23 }

Any ideas?

    mikes0011
    mikes0011Answer
    Brainy
    Jul 7, 2021 2:38 PM UTC

    Pretty much the exact same thing was answered several months ago, here.  The only real difference in that case is the zero values are replaced by the next nonzero member instead of the previous, but that should require only a very simple adjustment of the code.

    The Expression Guru

    2 replies

    mikes0011
    mikes0011Answer
    Brainy
    Jul 7, 2021 2:38 PM UTC

    Pretty much the exact same thing was answered several months ago, here.  The only real difference in that case is the zero values are replaced by the next nonzero member instead of the previous, but that should require only a very simple adjustment of the code.

    The Expression Guru
    csteward
    Brainy
    Jul 7, 2021 4:21 PM UTC

    Additionally, here's some sample code that should fit the bill:

    a!localVariables(
      local!data: {15,0,0,23,0,0,0},
      local!nonZeroIndexes: a!forEach(
        items: local!data,
        expression: if(fv!item=0,null,fv!index)
      ),
      
      a!forEach(
        items: local!data,
        expression: if(
          fv!item<>0,
          fv!item,
          index(
            local!data,
            max(rdrop(local!nonZeroIndexes,count(local!nonZeroIndexes)-fv!index)),
            null
          )
        )
      )
    )