(一) List.Accumulate
List.Accumulate(list as list, seed as any, accumulator as function) as any
第1参数是需要批量运算的列表(循环次数也是依据项目数);第2参数是初始值及计算后的数据(在第一次运算前需要给赋予一个初始值用于运算,第一次运算完后则赋值为代表运算后结果);第3参数是运算的函数。由至少2个变量组成,1个是第2参数,1个是需要处理的1参数循环列表。
例:
List.Accumulate({1..3},0,(x,y)=>x)=0
List.Accumulate({1..3},0,(x,y)=>y)=3
解释:x相当于第2参数,格式也是和第2参数相同。y代表的需循环的列表,返回的是循环处理最后一项的返回的值。因为这里第3参数没做处理,所以返回的也就是y的最后一项的值。
List.Accumulate({1..3},0,(x,y)=>x+y)
=List.Accumulate({1..3},0,(初始值,列表中的值)=>初始值+列表中的值)
=((0+1)+2)+3=6
解释:x代表第2参数的初始赋值,y代表需要处理的循环列表,也就是参数1的数据{1..3}。变量名称可以自己取,但是需注意位置。
第1次运算前,第2参数被赋值为0,所以第3参数计算结果为0+列表中的第一项1=0+1=1
第2次运算时,第2参数被赋值为上一次的运算结果1,所以第3参数计算结果为1+列表中的第二项2=1+2=3
第3次运行时,第2参数被赋值为上一次的运算结果3,所以第3参数结算结果为3+3=6
最终返回列表项目最后一个运算完成后的结果。一共运行的次数为列表1中的项目数,次项目数一共为3个,也就是1,2,3的值。
List.Accumulate({List.Sum},{1..3},(x,y)=>y(x))
=List.Sum({1..3})=6
解释:第1参数是列表,但是列表里面的值可以任意,所以如果需要在列表里面的值是函数则需要在外面套一层{}改变其表面格式。y代表的是第1参数列表内每一个循环值,在这里显示的是公式List.Sum。所以y(x)表示的就是List.Sum({1..3})=6
List.Accumulate({1..5},1,(x,y)=>y*x)=120
解释:这个是典型的阶乘计算,5!=((((1*1)*2)*3)*4)*5=120。得到一个结果作为值再做下一步运算。
List.Accumulate({"a".."c"},"",(x,y)=>x&y)=abc
解释:请注意第2参数为""空文本而不是null空值。
第一次运算是""&a,运算后的结果="a"
第二次的运算是"a"&"b",运算后的结果是="ab"
第三次的运算时"ab"&"c",运算后的结果是="abc"
此时第1参数项目里的内容全部运行完毕,返回最后的运算结果也就是"abc"。
List.Accumulate({"a".."z"},"abc123aef",(x,y)=>Text.Replace(x,y,"z"))=zzz123zzz
解释:此公式的作用是把小写英文字符全部替换成z。
第一次运算是Text.Repeat("abc123aef","a","z"),用z替换a,处理后的结果是“zbc123zef”
第二次运算是Text.Repear("zbc123def","b","z"),用z替换b,处理后的结果是"zzc123zef"
以此类推把英文小写字符全部替换完成。
List.Accumulate({1,2,3},"a",(x,y)=>x&"b")
=(("a"&"b")&"b")&"b"
="abbb"
解释:因为第3参数的函数中y不涉及到计算,所以y的值也就是列表中的值不做处理,但是列表中的项目是循环次数的依据。所以需要循环3次,返回最终的结果。
如果有用,动动你的小手进行转发。