Forum Discussion

Dicken's avatar
Dicken
Post Prodigy
1 year ago
Solved

Insert different table row or list range at each positon

Hi,  Any suggestion about this   i want to insert a  tablle row or list range at varous positons, but a different value at  each position  ie 1st postion "A", 2nd "B" or whatever  so , starting w...
  • MarkLaf's avatar
    1 year ago

    List.Generate versions if interested.

     

    This iterates the inserts and then grabs last one as output.

     

    let
        alist =  {"A".."Z"},
        addPosition = {3,7,12}, // buffer if query output
        addVals = {1,2,3}, // buffer if query output
        genAdds = List.Generate(
            ()=>[ i = 0, l = alist ],
            each [i] <= List.Count(addPosition),
            each let curIndex = [i] in [
                i = curIndex+1,
                l = List.InsertRange( [l], addPosition{curIndex}, {addVals{curIndex}} )
            ],
            each [l]
        ),
        output = List.Last( genAdds )
    in
        output

     

     

    And here is a variation where inserts retain original positioning.

     

    let
        alist =  {"A".."Z"},
        addPosition = {3,7,12}, // buffer if query output
        addVals = {1,2,3}, // buffer if query output
        addCount = List.Count(addPosition),
        genAdds = List.Generate(
            ()=>-1,
            each _ < addCount,
            each _ + 1,
            each [
                isLast = _+1 = addCount,
                curPos=if _ = -1 then 0 else addPosition{_}, 
                nextPos=if isLast then List.Count(alist) else addPosition{_+1}, 
                count = nextPos-curPos, 
                output = List.Range( alist, curPos, count ) & ( if isLast then {} else {addVals{_+1}} ) 
            ][output]
        ),
        combineParts = List.Combine( genAdds )
    in
        combineParts