2017-02-13 4 views
5

Предположим, у меня есть список, содержащий числа от 1 до 5. Как написать функцию в Elm, вызванную shuffleList, такую, что он принимает список целых чисел в качестве аргумента и возвращает рандомизированную версию списка?Как перетасовать список в вязах?

Е.Г.,

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

Смежные вопросы