Power Query M函数实现字符串内的字符随机排列

《登高》

杜甫

风急天高猿啸哀,渚清沙白鸟飞回。

无边落木萧萧下,不尽长江滚滚来。

万里悲秋常作客,百年多病独登台。

艰难苦恨繁霜鬓,潦倒新停浊酒杯。

Q:"百年多病独登台",打乱顺序,随机排列。

我们知道,排序功能,List中有、Table中也有,单纯的数字排序在我们这个问题没用意义,我们需要生成一列于字符串等长的随机数,然后通过表格排序随机数,实现字符的随机排列。

我们会用到函数:

· Text.ToList:将字符串变成列表

· List.Random:生成随机数列表

· List.Count:列表元素计数

· Table.Sort:表排序

· Text.Combine:文本合并

这过程中,还需要有表格转换函数,是使用Recoard.ToTable、还是Table.FormColumns?

Recoard.ToTable

我们用字符作为Record的Name,随机数作为Record的Value,然后转换成表格,排序实现随机排列,下面分步来做:

Text.ToList:

Power Query M函数实现字符串内的字符随机排列

同样长度的随机数列表:

Power Query M函数实现字符串内的字符随机排列

组成Record:

Power Query M函数实现字符串内的字符随机排列

转成表格:

Power Query M函数实现字符串内的字符随机排列

Value列排序:

Power Query M函数实现字符串内的字符随机排列

提取Name列合并文本:

Power Query M函数实现字符串内的字符随机排列

似乎很顺利就完成了,字符串内部的乱序,我们修改一下数据源看看:

Power Query M函数实现字符串内的字符随机排列

看看能不能实现乱序:

Power Query M函数实现字符串内的字符随机排列

"无边落木萧萧下",Record的Name不能重复,所以报错。

所以上面的过程适合非重复字符串的乱序。如果有重复的字符,我们还需要修改我们的过程。

添加列的方式行不通,我做过测试,先把字符列表转换成表格,然后添加随机数列,即使指定了数据类型,也无法实现排序:

Power Query M函数实现字符串内的字符随机排列

所以这个随机数列,需要在组表之前就生成,不能后添加。

Table.FormColumns

用之前做过的字符串列表与随机数列表组成表格:

Power Query M函数实现字符串内的字符随机排列

排序:

Power Query M函数实现字符串内的字符随机排列

我们整理一下,把文本合并:

Power Query M函数实现字符串内的字符随机排列

即使是标点符号重复,也不要紧,都能实现整个字符串内的字符随机排列。


我们总结一下,最后这种方法更通用一些,要注意的地方就是随机数的生成,必须是在表格生成之前,如果是后添加的随机数列,不能排序,具体啥原因咱也不了解。

展开阅读全文

页面更新:2024-04-22

标签:字符串   函数   排列   字符   随机数   浊酒   数列   用字   潦倒   标点符号   长江   表格   文本   过程   列表   科技

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top