让我说我有一个包含数字1到5的列表。如何在Elm中编写一个名为shuffleList
的函数,使得它将整数列表作为参数并返回随机版本列表?
如,
shuffleList [1,2,3,4,5]
{-5,1,2,4,3-}
可以对随机种子进行硬编码
答案 0 :(得分:8)
您可能需要来自elm-community / random-extra的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"
上使用此示例
答案 1 :(得分:0)
http://package.elm-lang.org/packages/elm-community/elm-random-extra/1.0.2有Random.Array.shuffle所以只需转换为数组,随机播放并转换回来