这篇依旧是List.Accumulate的函数应用详解。但是第2参数是作为列表格式使用。
List.Accumulate({1..3},{},(x,y)=>x&{y})
={}&{1}={1}
={1}&{2}={1,2}
={1,2}&{3}
={1,2,3}
解释:第2参数既然是any,不仅可以代表空文本,也可以是空列表。
List.Accumulate({1..5},{},(x,y)=>
ifNumber.Mod(y,2)=1 then x&{y} else x)={1,3,5}
解释:功能是把奇数的组合成一个列表。其中涉及到一个Number.Mod取余函数。红色代表y,蓝色代表x。
第一步,做判断Number.Mod(1,2)=1,结果是True,所以是{}&{1},也就是{1}
第二步,做判断Number.Mod(2,2)=0<>1,结果是False,所以是x,也就是上一步的计算结果{1}
第三步,做判断Number.Mod(3,2)=1,结果是True,所以是{1}&{3}={1,3}
第四步,做判断Number.Mod(4,2)=0<>1,结果是False,所以是x,也就是上一步的计算结果{1,3}
第五步,做判断Number.Mod(5,2)=1,结果是True,所以是{1,3}&{5}={1,3,5}
List.Accumulate({1..10},{{},{}},(x,y)=> if Number.Mod(y,2)=0 then{x{0}&{y},x{1}} else {x{0},x{1}&{y}})
={{2,4,6,8,10},{1,3,5,7,9}}
解释:根据条件分组归类并组合成列表,把奇数和偶数分别归类成2组列表。
第一步,做判断Number.Mod(1,2)=1,计算结果为{x{0},x{1}&{y}}={{},{}&{1}}={{},{1}}
第二步,做判断Number.Mod(2,2)=0,计算结果为{x{0}&{y},x{1}}={{}&{2},{1}}={{2},{1}}
第三步,做判断Number.Mod(3,2)=1,计算结果为{x{0},x{1}&{y}}={{2},{1}&{3}}={{2},{1,3}}
第四步,做判断Number.Mod(4,2)=0,计算结果为{x{0}&{y},x{1}}={{2}&{4},{1,3}}={{2,4},{1,3}}
以此类推最终的结果就是生成2个类别,第一个列表为偶数{2,4,6,8,10},第二个列表为奇数{1,3,5,7,9}。
List.Accumulate({100,50,10},{{},255},(x,y)=>
{x{0}&{Number.IntegerDivide(x{1},y)},
Number.Mod(x{1},y)})
={{2,1,0},{5}}
解释:这里面涉及到2个函数Number.IntegerDivide(取整)和Number.Mod(取余)。255从对指定列表的数从大到小进行整除,得到一个取整的列表以及最后一个余数。通常用于积分兑换,零钱兑换等实际应用案例。
第一步,{{}& Number.IntegerDivide(255,100)}, Number.Mod(255,100)}={{}&{2},55}={{2},55}
第二步,{{}&{Number.IntegerDivide(55,50)}, Number.Mod(55,50)}={{2}&{1},5}={{2,1},5}
第三步,{{}&{Number.IntegerDivide(5,10)}, Number.Mod(5,10)}={{2,1}&{0},5}={{2,1,0},5}