假设我有一个包含数字1到5的列表.如何在Elm中编写一个函数,shuffleList使得它将整数列表作为参数并返回列表的随机版本?
例如,
shuffleList [1,2,3,4,5]
{-5,1,2,4,3-}
Run Code Online (Sandbox Code Playgroud)
可以对随机种子进行硬编码
你可能想要shuffleelm-community/random-extra的功能.在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"
Run Code Online (Sandbox Code Playgroud)
在Ellie上使用它的一个例子