2012-06-14 14 views
25

Esiste una semplice funzione di shuffle per gli elenchi Scala?Scala ListBuffer (o equivalente) shuffle

In caso contrario, qual è il modo più semplice per implementare?

ho un sacco di queste cose da fare tutto il codice, in modo più semplice la chiamata, il migliore è

Un esempio in Ruby

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

Grazie in anticipo :)

+0

Hai guardato usando [Collections.shuffle()] [1]? [1]: http://stackoverflow.com/questions/1259223/how-to-use-java-collections-shuffle-on-a-scala-array?rq=1 –

+0

Hmm, non utilizza java .. .only scala nativa funzioni :) – rdlu

+1

@BrianAgnew, che non funzionerà con le collezioni Scala. – missingfaktor

risposta

34

In Scala è possibile utilizzare 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) 

I risultati possono variare. ..

+0

Molto bello e pulito, ma per qualche motivo non ha funzionato con Array [Oggetti], solo con Elenchi e ListBuffer (usando 2.8) – rdlu

+0

@ rodrigo.dk La raccolta deve essere qualcosa che implementa il tratto TraversableOnce. Prova ArrayBuffer per esempio. – Brian

+1

@ rodrigo.dk usa java.util.Collections.shuffle per gli array –