在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集合框架内(如果只是为了简单)。
答案 0 :(得分:2)
答案 1 :(得分:1)
似乎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
}
根据rangeImpl的from
和to
的定义,看起来这可能是O(log(n)),但基于实际计时,它会出现为所有合理的n值线性增长。
所以我不确定。