2017-02-13 68 views
5

比方說,我有一個包含數字1到5的列表。我如何在Elm中編寫一個名爲shuffleList的函數,以便將整數列表作爲參數並返回列表的隨機版本?如何在Elm中洗牌?

例如,

shuffleList [1,2,3,4,5] 
{-5,1,2,4,3-} 

這是確定以硬編碼的隨機種子

+0

http://package.elm-lang.org/pa ckages/mgold/Elm-Random-Sampling/2.0.3/Random-Array –

+0

此庫的代碼示例不起作用 –

+0

http://tylerscode.com/2016/06/list-shuffle-elm/ – wintvelt

回答

7

你可能想從榆樹社區/隨機額外的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