我需要维护一个排序的序列(可变或不可变 - 我不在乎),动态地将元素插入其中间(以保持其排序)并同样删除它们(因此,索引的随机访问是关键)。
我遇到的最好的事情是使用从2.11开始的Vector和scala.collections.Searching,然后:
var vector: Vector[Ordered]
...
val ip = vector.search(element)
插入:
vector = (vector.take(ip.insertionPoint) :+ element) ++ vector.drop(ip.insertionPoint)
删除:
vector.patch(from = ip.insertionPoint, patch = Nil, replaced = 1)
对我来说并不优雅,我怀疑性能问题。有没有更好的办法?拼接序列对我来说似乎是一个非常基本的操作,但我无法找到一个优雅的解决方案。
答案 0 :(得分:5)
您应该使用SortedSet
。 SortedSet
的默认实施是immutable red-black tree
。还有mutable implementation。
SortedSet[Int]() + 5 + 3 + 4 + 7 + 1
// SortedSet[Int] = TreeSet(1, 3, 4, 5, 7)
Set
不包含重复元素。如果您想要计算重复元素,可以使用SortedMap[Key, Int]
将元素作为键并计为值。请MultiSet
使用Map
了解{{1}}仿真。{/ p>