scala: ¿cómo convertir ArrayBuffer en un conjunto?

He estado buscando un poco de tiempo sobre cómo convertir un ArrayBuffer a una Set, un HashSet Supongo que para ser preciso. ¿Alguna pista?

preguntado el 01 de febrero de 12 a las 22:02

La búsqueda es tu amiga en scaladoc. Si escribió "set" en la lista de métodos, se le dará una lista de 13 métodos, donde habría sido mucho más fácil de detectar toSet. -

3 Respuestas

Hay un toSet función implementada en ArrayBuffer

Ejemplo:

scala> import collection.mutable.ArrayBuffer
import collection.mutable.ArrayBuffer

scala> import collection.immutable.HashSet
import collection.immutable.HashSet

scala> val a = new ArrayBuffer(2)
a: scala.collection.mutable.ArrayBuffer[Nothing] = ArrayBuffer()

scala> val b = a.toSet
b: scala.collection.immutable.Set[Nothing] = Set()

Respondido 02 Feb 12, 02:02

Loco, miré el scaladoc pero me lo perdí y eclipse no quería completar automáticamente mi última matriz para poder descubrir cómo convertirlo, muchas gracias - espacio borg

Para configurar:

scala> val bf = ArrayBuffer(1,2,3,4)
bf: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1, 2, 3, 4)
scala> bf.toSet
res0: scala.collection.immutable.Set[Int] = Set(1, 2, 3, 4)

Para HashSet:

scala> val hs = new HashSet[Int]++ bf.toSet
hs: scala.collection.immutable.HashSet[Int] = Set(1, 2, 3, 4)

Respondido 02 Feb 12, 02:02

El segundo ejemplo es redundante. Hacen más o menos lo mismo, con la excepción de que toSet usará clases especializadas para Sets en lugar de HashSet para menos de 5 elementos: ArrayBuffer(1,2,3,4).toSet.isInstanceOf[HashSet[_]] == false, ArrayBuffer(1,2,3,4,5).toSet.isInstanceOf[HashSet[_]] == true - soc

@soc gracias por el comentario - no sabía sobre la especialización de menos de 5 elementos - Om nom nom

En aras de la integridad, una forma más:

scala> import collection.mutable.ArrayBuffer
import collection.mutable.ArrayBuffer

scala> val as = ArrayBuffer(34, 89, 11)
as: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(34, 89, 11)

scala> Set(as: _*)
res13: scala.collection.immutable.Set[Int] = Set(34, 89, 11)

Respondido 02 Feb 12, 08:02

Probé este conjunto (matriz: _ *) pero por algunas razones no funcionó. Me alegra ver que debería haberlo hecho :) - espacio borg

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.