Forum Discussion
Inserting blank into a list ,
Hi,
in the code below is there a way to deal with the fact the last value is not included, other than what i have don and
let alist = { "a","a","a","a","b","b","b","b","c","c","c","d"} ,
poslist = { 0..List.Count( alist )-2} in
List.Accumulate( poslist, {}, (s,c)=>
if alist {c} = alist {c +1} then s & { alist {c} } else
s & { alist {c} , "", List.Last( alist) } )
just stuck it on at the end, I know there are oher ways, but I'm just interested in a neater way or perhaps an 'and'
statement.
Richard.
Please read post alist =
{ "a","a","a","a","b","b","b","b","c","c","c","d"}This perhaps?:
let alist = {"a","a","a","a","b","b","b","b","c","c","c","d"}, poslist = {1..List.Count(alist)-1} in List.Accumulate(poslist, {alist{0}}, (s,c)=> if alist{c} = alist{c-1} then s & {alist{c}} else s & {"",alist{c}})resulting in:
or use null instead of "".
10 Replies
- AntrikshSharmaCommunity Champion
Dicken What is it that you're trying to achieve here? Add a blank row before each new alphabet?
- DickenPost Prodigy
No I , that is what it does, I want a better solution to getting the last value included ohter than just adding it on the end, I did say this in the originla post, please don't suggest alternativves as that is not the point I wans a conditons that will autmatically include the last value when ii is met or something somilar.
- AlienSxSuper User
please show us what you have as a start (presumably alist) and what you want to get in the end. We don't need your code. Thanks.
- DickenPost Prodigy
No I'm tryiing to achieve what I said I was trying to achieve, a way of avoiding just adding the last value on
at then end.s & { alist {c} , "original post. - p45calSolution Supplier
This perhaps?:
let alist = {"a","a","a","a","b","b","b","b","c","c","c","d"}, poslist = {1..List.Count(alist)-1} in List.Accumulate(poslist, {alist{0}}, (s,c)=> if alist{c} = alist{c-1} then s & {alist{c}} else s & {"",alist{c}})resulting in:
or use null instead of "".
- DickenPost Prodigy
Yes , thanks, I had gon about it in a slightly different way, this is to insert 3 blank rows but the principle hte same starting a 1 column tablle to insert 3 blank rows at change; the main problem is it's not very effecient, need to re write with generate ?
= let alist = Source [Test] , pos = { 1..List.Count(alist ) -1} , acc = List.Accumulate( pos, {}, (s,c)=> if alist {c-1} = alist {c} then s & {0} else s & { 0,1,0,0} ) in List.Accumulate( List.PositionOf( acc, 1 , Occurrence.All ), Source , (s,c)=> Table.InsertRows( s, c ,Table.ToRecords( insert3 ) ))- p45calSolution Supplier
to insert 3 blank rows instead of one, use:
…then s & {alist{c}} else s & {null,null,null,alist{c}}
or:
…then s & {alist{c}} else s & {"","","",alist{c}}
or any number of blank rows (10 here):
…then s & {alist{c}} else s & List.Repeat({null},10) & {alist{c}})
- slorinSuper User
Hi Dicken
Without List.Accumulate
= List.Combine(
List.Transform(
List.Zip({alist,List.Skip(alist)}),
each if _{0} = _{1} or _{1} = null then {_{0}} else {_{0}, ""})
)or with your first idea
= let alist = { "a","a","a","a","b","b","b","b","c","c","c","d"} ,
poslist = { 0..List.Count( alist )-1} in
List.Accumulate( poslist, {}, (s,c)=>
if c=List.Max(poslist) or alist {c} = alist {c +1} then s & { alist {c} } else
s & { alist {c} , "", List.last(alist)} )Stéphane