从数组随机抽取5个不重复_Power Query 如何保证随机抽取元素不重复
繼續昨天的話題,昨天我們實現完全的隨抽取列表元素,有一個問題就是可能幾次會抽取同一個位置的元素:
1-50中隨機抽取5個數值,點擊刷新,就會出現不同的結果,如上圖可能會出現兩個相同的數值,如何確保每次都能抽取到不同的元素?
兩個思路:
- 每次抽取結束后,被抽到的元素從列表中移除,再進行下次抽取
- 確保抽取的元素位置不重復
我們今天要用到的是第二種,我們用兩個函數來確保取得非重復的位置:
- List.Distinct:獲取非重復元素列表
- List.FirstN:獲取前幾個元素
昨天講的產生隨機整數的套路繼續沿用,我們來看自定義函數:
let
源 =(l,n)=>List.Transform(
List.FirstN(
List.Distinct(
List.Transform(
{1..100},
(x)=>Number.IntegerDivide(Number.RandomBetween(0,List.Count(l)-1),1))
),
n),
(x)=>l{x})
in
源
代碼有點長,我們分解來看:
最里層的List.Transform是產生一個隨機整數的列表,為了防止出現重復導致列表元素去重復后數量不夠,我們要求做100個隨機數。具體的隨機數的公式就不解釋了,參照昨天的內容。
List.Distinct把這100個隨機整數列表去重復。
List.FirstN取非重復整數列表的前n個元素。
最外層的List.transform就是根據List.FirstN產生的地址,取出列表l元素。
這樣大家是不是就能夠了解這個函數的意思了。
我們來看引用這個函數的結果:
我們從小寫字母中,隨機抽取5個字母,保證不重復。
歡迎加入圈子,學習更多Power Query相關的知識。
總結
以上是生活随笔為你收集整理的从数组随机抽取5个不重复_Power Query 如何保证随机抽取元素不重复的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: AVFoundation – AVAss
- 下一篇: qt提升控件之后,编译报错