是否有Scala版本的NavigableMap?

时间:2011-08-29 00:39:32

标签: scala collections scala-collections treemap

在Java 1.6中,引入了NavigableMap(和NavigableSet)接口,并更新了TreeMap以实现新接口。除此之外,NavigableMap对于询问诸如“集合中哪个元素最接近X?”之类的问题非常有用(请参阅this excellent blog post by François Sarradin以获取示例和讨论)。

我希望在Scala 2.8的TreeMap实现中找到类似的东西,但唉,它似乎并非如此(至少,它并不明显)。是否有另一个类似于Java的NavigableMap的Scala类或特征?如果没有,是否有一些简单的Scala习语可以用来实现类似的东西?

我意识到我可以使用Java的TreeMap,但我想留在Scala集合框架内(如果只是为了简单)。

2 个答案:

答案 0 :(得分:2)

对于不可变集合,具有后引用使得无法使集合持久化。因此,人们使用zippers来浏览这些结构。 Anti-xml在使用XML时有一个很好的使用拉链的例子。

答案 1 :(得分:1)

Here's a thread on this topic

似乎SortedMap 可以能够让你在那里的一部分,但到目前为止我测试了我不确定它是否是O(log(n) )搜索的方式应该是:

def searchMap(m: SortedMap[Int,_], k: Int) = {
    val left  = m to(k) lastKey
    val right = m from(k) take(2) lastKey

    if (k - left < right - k)
        left
    else
        right
}

根据rangeImplfromto的定义,看起来这可能是O(log(n)),但基于实际计时,它会出现为所有合理的n值线性增长。

所以我不确定。