这是一个非常不可思议的惊喜:
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)
Run Code Online (Sandbox Code Playgroud)
这个例子本身就表明了我的问题的"不"答案.那怎么样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)
Run Code Online (Sandbox Code Playgroud)
这个似乎工作,但我应该依靠这种行为?还有哪些其他数据结构适用于必须保留原始订单的唯一项目的不可变集合?
顺便说一下,我确实知道distict方法List.问题是,我想在接口级强制执行项目的唯一性(同时保留顺序),因此使用distinct会弄乱我的整洁设计.
编辑
ListSet 看起来也不太可靠:
scala> ListSet(1, 2, 3, 4, 5).toList
res28: List[Int] = List(5, 4, 3, 2, 1)
Run Code Online (Sandbox Code Playgroud)
EDIT2
在我寻找完美设计时,我试过这个:
scala> class MyList[A](list: List[A]) …Run Code Online (Sandbox Code Playgroud) ListSet(collection.immutable.ListSet)是一个反向排序集.我需要订购套装.这是原始ListSet的一个示例:
var a = ListSet(1,2,3)
var ite = a.iterator
ite.next // returns 3
ite.next // returns 2
ite.next // returns 1
Run Code Online (Sandbox Code Playgroud)
这是我需要的一个例子:
var a = ListSet(1,2,3)
var ite = a.iterator
ite.next // returns 1
ite.next // returns 2
ite.next // returns 3
Run Code Online (Sandbox Code Playgroud)
更新:
"订购"是我的"插入订单".我需要这个:
var a = ListSet(1,2,3)
a += 5
a += 4
var ite = a.iterator
ite.next // returns 1
ite.next // returns 2
ite.next // returns 3
ite.next // returns 5
ite.next // returns 4
Run Code Online (Sandbox Code Playgroud)