Table.PositionOf 成語類型轉(zhuǎn)換案例

本期案例是對(duì)成語格式進(jìn)行轉(zhuǎn)換,前后轉(zhuǎn)換效果如下:

?解題套路
?1.Table.PositionOf
解題思路:用“相親相愛”舉個(gè)例子。將成語轉(zhuǎn)成列表lst1,然后去重獲得非重復(fù)的部分text(“相親愛”),然后用lst遍歷尋找其在text中出現(xiàn)的位置,獲得列表lst2({0,1,0,3}),再結(jié)合lit3{“A”..“D”},就獲得了結(jié)果“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({相,親,愛})進(jìn)行壓縮,就獲得了一個(gè)一一對(duì)應(yīng)的lst3:

?用lst3進(jìn)行循環(huán)替換,就獲得了最終的結(jié)果:

最終轉(zhuǎn)換:

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函數(shù):用“相親相愛”進(jìn)行舉例說明。
ACC函數(shù)的第二參數(shù)為列表,第一項(xiàng)用于存放結(jié)果,結(jié)果的樣式為{類型,字符};第二項(xiàng)用于存放類型{“A”..“D”}。
當(dāng)傳遞第一個(gè)字符的時(shí)候,先在第一項(xiàng)中尋找第二個(gè)字符為“相”的列表,其結(jié)果為空,就將其與第二項(xiàng)中的首項(xiàng)一起存放再第一項(xiàng),然后對(duì)第二項(xiàng)進(jìn)行變更,獲得結(jié)果 {{相,A},{“B”..“D”}}……用表格的形式展現(xiàn)下:
?

最終轉(zhuǎn)換結(jié)果:

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})))
?

以上是本期分享內(nèi)容。