《登高》
杜甫
風急天高猿嘯哀,渚清沙白鳥飛回。
無邊落木蕭蕭下,不盡長江滾滾來。
萬里悲秋常作客,百年多病獨登臺。
艱難苦恨繁霜鬢,潦倒新停濁酒杯。
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:
同樣長度的隨機數列表:
組成Record:
轉成表格:
Value列排序:
提取Name列合併文字:
似乎很順利就完成了,字串內部的亂序,我們修改一下資料來源看看:
看看能不能實現亂序:
"無邊落木蕭蕭下",Record的Name不能重複,所以報錯。
所以上面的過程適合非重複字串的亂序。如果有重複的字元,我們還需要修改我們的過程。
新增列的方式行不通,我做過測試,先把字元列表轉換成表格,然後新增隨機數列,即使指定了資料型別,也無法實現排序:
所以這個隨機數列,需要在組表之前就生成,不能後新增。
Table.FormColumns用之前做過的字串列表與隨機數列表組成表格:
排序:
我們整理一下,把文字合併:
即使是標點符號重複,也不要緊,都能實現整個字串內的字元隨機排列。
我們總結一下,最後這種方法更通用一些,要注意的地方就是隨機數的生成,必須是在表格生成之前,如果是後新增的隨機數列,不能排序,具體啥原因咱也不瞭解。