2017-02-13 17 views
5

Diyelim ki 1 ile 5 arasındaki sayıları içeren bir listeye sahibim. Elm'de shuffleList adında bir işlevi nasıl yazabilirim? Tamsayıların listesini bir argüman olarak alır ve listenin rastgele bir sürümünü döndürür? It is OKElm'de bir listeyi nasıl karıştırılır?

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

Ör Muhtemelen karaağaç-toplum/random-ekstra dan shuffle fonksiyonunu istediğiniz rasgele tohum

+0

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

+0

Bu kütüphane için kod örneği çalışmıyor –

+0

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

cevap

7

kodlamalısınız. Eğer olsa elle bunu yapmak istiyorsanız aşağıdakileri yapabilirsiniz ilk Seed verilen Ellie

o kullanma örneği

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" 

bir örnek (bu elm-community/list-extra paketinden bazı fonksiyonları kullanan) Ellie

İlgili konular