2012-06-14 11 views
25

Czy na liście Scala dostępna jest prosta funkcja shuffle?Scala ListBuffer (lub odpowiednik) shuffle

Jeśli nie, jaki jest najprostszy sposób wdrożenia?

mam wiele z tych rzeczy do zrobienia całego kodu, więc prostsze połączenia, najlepiej jest

Przykładem w Ruby

a = [ 1, 2, 3 ]   #=> [1, 2, 3] 
a.shuffle     #=> [2, 3, 1] returns new array shuffled 

Z góry dzięki :)

+0

Czy przyjrzał Ci się użycie [Collections.shuffle()] [1]? [1]: http://stackoverflow.com/questions/1259223/how-to-use-java-collections-shuffle-on-a-scala-array?rq=1 –

+0

Hmm, nie używając java .. .only scala native functions :) – rdlu

+1

@BrianAgnew, to nie działa z kolekcjami Scala. – missingfaktor

Odpowiedz

34

W Scali można użyć scala.util.Random:

util.Random.shuffle((1 to 10).toSeq) 
//Vector(9, 6, 8, 7, 10, 1, 2, 5, 3, 4) 

util.Random.shuffle(List('A', 'B', 'C', 'D', 'E', 'F')) 
//List(B, D, A, E, C, F) 

Twoje wyniki mogą się różnić. ..

+0

Bardzo ładny i czysty, ale z jakiegoś powodu nie pracował z Array [Przedmioty], tylko z listami i ListBuffers (używając 2.8) – rdlu

+0

@ rodrigo.dk Kolekcja musi być coś, co realizuje TraversableOnce cechy. Wypróbuj na przykład ArrayBuffer. – Brian

+1

@ rodrigo.dk używać java.util.Collections.shuffle dla tablic –