Forum Discussion
Dicken
1 year agoPost Prodigy
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...
- 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 outputAnd 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
jgeddes
1 year agoSuper User
Are you looking for something like this?
let
alist = {"A".."Z"},
list_to_insert =
{
{"abc", "def", "ghi"},
{"zyx", "wvu", "tsr"},
{123, 456,789},
{987, 654, 321}
},
positions_list = {3, 7, 12, 7},
zipped_list = List.Zip({positions_list, List.Numbers(0, List.Count(positions_list))})
in
List.Accumulate( zipped_list , alist, (s,c)=>List.InsertRange(s, c{0}, list_to_insert{c{1}}))