Scala矢量拼接(维持排序顺序)

时间:2014-12-19 12:42:06

标签: scala sorting collections

我需要维护一个排序的序列(可变或不可变 - 我不在乎),动态地将元素插入其中间(以保持其排序)并同样删除它们(因此,索引的随机访问是关键)。

我遇到的最好的事情是使用从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)

对我来说并不优雅,我怀疑性能问题。有没有更好的办法?拼接序列对我来说似乎是一个非常基本的操作,但我无法找到一个优雅的解决方案。

1 个答案:

答案 0 :(得分:5)

您应该使用SortedSetSortedSet的默认实施是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>