2012-06-14 13 views
25

¿Existe una función de reproducción simple para las listas de Scala?Scala ListBuffer (o equivalente) shuffle

Si no, ¿cuál es la forma más sencilla de implementar?

que tienen una gran cantidad de estas cosas hay que hacer todo el código, por lo que el más simple de la llamada, el mejor es

Un ejemplo en Ruby

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

Gracias de antemano :)

+0

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

+0

Hmm, no usa Java. .lyly scala funciones nativas :) – rdlu

+1

@BrianAgnew, eso no funcionará con las colecciones de Scala. – missingfaktor

Respuesta

34

En Scala puede utilizar 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) 

Sus resultados pueden variar. ..

+0

Muy bonito y limpio, pero por alguna razón no funcionó con Array [Objects], solo con Lists y ListBuffers (usando 2.8) – rdlu

+0

@ rodrigo.dk La colección tiene que ser algo que implemente el rasgo TraversableOnce. Pruebe ArrayBuffer por ejemplo. – Brian

+1

@ rodrigo.dk usa java.util.Collections.shuffle para matrices –