比方說,我有一個包含數字1到5的列表。我如何在Elm中編寫一個名爲shuffleList
的函數,以便將整數列表作爲參數並返回列表的隨機版本?如何在Elm中洗牌?
例如,
shuffleList [1,2,3,4,5]
{-5,1,2,4,3-}
這是確定以硬編碼的隨機種子
比方說,我有一個包含數字1到5的列表。我如何在Elm中編寫一個名爲shuffleList
的函數,以便將整數列表作爲參數並返回列表的隨機版本?如何在Elm中洗牌?
例如,
shuffleList [1,2,3,4,5]
{-5,1,2,4,3-}
這是確定以硬編碼的隨機種子
你可能想從榆樹社區/隨機額外的shuffle
功能。使用上Ellie
如果你想通過手雖然要做到這一點,給定一個初始Seed
可以執行以下的實施例(在此利用的某些功能從elm-community/list-extra包)
import List.Extra exposing (getAt, removeAt)
import Random exposing (Seed, int, step)
shuffleList : Seed -> List a -> List a
shuffleList seed list =
shuffleListHelper seed list []
shuffleListHelper : Seed -> List a -> List a -> List a
shuffleListHelper seed source result =
if List.isEmpty source then
result
else
let
indexGenerator =
int 0 ((List.length source) - 1)
(index, nextSeed) =
step indexGenerator seed
valAtIndex =
getAt index source
sourceWithoutIndex =
removeAt index source
in
case valAtIndex of
Just val ->
shuffleListHelper nextSeed sourceWithoutIndex (val :: result)
Nothing ->
Debug.crash "generated an index outside list"
一個例子在Ellie
http://package.elm-lang.org/packages/elm-community/elm-random-extra/1.0.2使用這Random.Array.shuffle所以才轉換成數組,洗牌,並轉換回
我不能讓代碼工作 –
http://package.elm-lang.org/pa ckages/mgold/Elm-Random-Sampling/2.0.3/Random-Array –
此庫的代碼示例不起作用 –
http://tylerscode.com/2016/06/list-shuffle-elm/ – wintvelt