Scala: puis-je compter sur l'ordre des éléments dans un Ensemble?

C'était un unplesant surprise:

scala> Set(1, 2, 3, 4, 5)       
res18: scala.collection.immutable.Set[Int] = Set(4, 5, 1, 2, 3)
scala> Set(1, 2, 3, 4, 5).toList
res25: List[Int] = List(5, 1, 2, 3, 4)

L'exemple en lui-même suggérer un "non" en réponse à ma question. Alors que penser de ListSet?

scala> import scala.collection.immutable.ListSet
scala> ListSet(1, 2, 3, 4, 5)
res21: scala.collection.immutable.ListSet[Int] = Set(1, 2, 3, 4, 5)

Celui-ci semble fonctionner, mais dois-je compter sur ce comportement?
Quelles sont les autres données de la structure est adaptée pour une immuable collection de pièces uniques, où l'ordre d'origine doit être conservé?

En passant, je ne sais à propos de distict méthode dans List. Le problème est, je veux renforcer l'unicité des éléments (tout en préservant l'ordre) au niveau de l'interface, afin de l'utiliser distinct serait gâcher ma conception soignée..

MODIFIER

ListSet ne semblent pas très fiables:

scala> ListSet(1, 2, 3, 4, 5).toList
res28: List[Int] = List(5, 4, 3, 2, 1)

EDIT2

Dans ma recherche d'un design parfait, j'ai essayé ceci:

scala> class MyList[A](list: List[A]) { val values = list.distinct }
scala> implicit def toMyList[A](l: List[A]) = new MyList(l)
scala> implicit def fromMyList[A](l: MyList[A]) = l.values     

Qui fonctionne réellement:

scala> val l1: MyList[Int] = List(1, 2, 3)
scala> l1.values
res0: List[Int] = List(1, 2, 3)

scala> val l2: List[Int] = new MyList(List(1, 2, 3))
l2: List[Int] = List(1, 2, 3)

Le problème, cependant, est que je ne veux pas exposer MyList en dehors de la bibliothèque. Est-il possible d'avoir la conversion implicite lors de la substitution? Par exemple:

trait T { def l: MyList[_] }
object O extends T { val l: MyList[_] = List(1, 2, 3) }
scala> O.l mkString(" ")  //Let's test the implicit conversion
res7: String = 1 2 3      

Je voudrais faire comme ceci:

object O extends T { val l = List(1, 2, 3) }  //Doesn't work
  • Où pourrais-je lire sur la scala de collections plus en profondeur que "Programming in Scala" et Scaladocs?
  • C'est un bon endroit pour commencer à apprendre à propos de la Scala collections: scala-lang.org/docu/files/collections-api/collections.html
  • Les jeux ont par (mathématiques), pas de définition de l'ordre et de la plupart des langues s'en tenir à cette convention. Curieux, pourquoi voudriez-vous attendre à avoir? L'ordre est la seule différence notable entre Seq et Set en plus d'originalité!
  • Dans ce cas, je ne suis pas trop préoccupé par les propriétés mathématiques de ma structure de données. J'ai juste besoin d'une immuable collection d'articles distincts avec leur ordre d'origine conservés. Appelez cela une liste, ensemble, vecteur, une table ou un "camion" 🙂