欢迎光临散文网 会员登陆 & 注册

Table.PositionOf 成语类型转换案例

2023-03-09 09:36 作者:可乐之滨  | 我要投稿

本期案例是对成语格式进行转换,前后转换效果如下:

 解题套路

 1.Table.PositionOf

解题思路:用“相亲相爱”举个例子。将成语转成列表lst1,然后去重获得非重复的部分text(“相亲爱”),然后用lst遍历寻找其在text中出现的位置,获得列表lst2({0,1,0,3}),再结合lit3{“A”..“D”},就获得了结果“ABAC”。


M语言:

Table.AddColumn(源,"类型",each Text.Combine(List.Transform(Text.ToList([成语]),(x)=>{"A".."D"}{Text.PositionOf(Text.Combine(List.Distinct(Text.ToList([成语]))),x)})))

 

2.List.Accumulate

解题思路:还是用“相亲相爱”举例。将lst1({“A”..“D”})与去重后的lst2({相,亲,爱})进行压缩,就获得了一个一一对应的lst3:


 用lst3进行循环替换,就获得了最终的结果:

最终转换:

M语言:

Table.AddColumn(源,"类型",each List.Accumulate(List.Select(List.Zip({{"A".."D"},List.Distinct(Text.ToList([成语]))}),each _{1}<>null),[成语],(x,y)=>Text.Replace(x,y{1},y{0})))

 

还有一种就是直接使用ACC函数:用“相亲相爱”进行举例说明。

ACC函数的第二参数为列表,第一项用于存放结果,结果的样式为{类型,字符};第二项用于存放类型{“A”..“D”}。

当传递第一个字符的时候,先在第一项中寻找第二个字符为“相”的列表,其结果为空,就将其与第二项中的首项一起存放再第一项,然后对第二项进行变更,获得结果 {{相,A},{“B”..“D”}}……用表格的形式展现下:

 

最终转换结果:

M语言:

Table.AddColumn(源,"类型",each Text.Combine(List.Transform(List.Accumulate(Text.ToList([成语]),{{},{"A".."D"}},(x,y)=>let lst=List.Select(x{0},each  _{0}=y) in if lst={} then {x{0}&{{y,x{1}{0}}},List.Skip(x{1})} else {x{0}&lst,x{1}}){0},each _{1})))

 

以上是本期分享内容。

Table.PositionOf 成语类型转换案例的评论 (共 条)

分享到微博请遵守国家法律