Scala范围/区间映射结构

时间:2014-08-14 05:35:47

标签: scala range guava red-black-tree range-map

我有Data structures that can map a range of keys to a value中提到的几乎相同的问题,但是对于Scala。

也就是说,我希望有一个非重叠的1D范围 [a [i],b [i])的可变系统,它将映射到某种值< EM> v [I] 。执行此类工作的标准基础数据结构是红黑树。

我希望它拥有的操作,最好是所有操作都应该具有O(log n)的复杂度:

  • 通过指定其中的任何一点来查询并获取给定范围(开始,结束,存储值)或缺少该范围
  • 在此结构中插入新范围
  • 从结构中删除范围

所以,我想到目前为止我看到以下变种,所有这些都有其缺点:

  • Java's TreeMap之上滚动自己的容器 - 快速&amp;肮脏,但由于缺乏适当的维护而长期可能不好
  • 使用Guava的RangeMap - 可能,但在Scala收藏世界中会很尴尬
  • 尝试使用Scala的红黑树实现并尝试自己滚动,但是,我认为这很难,因为Scala's TreeMap只是不可变的并且错过了直接的查找方法,例如Java的TreeMap floorEntry

我在这里遗漏了什么吗?是否有任何类似Guava的维护良好的集合扩展库使用扩展基本Scala集合的Scala中心API?

强烈相关的问题:

1 个答案:

答案 0 :(得分:2)

我最有可能封装Guava的RangeMap。您只需要一个三个方法类,在其后面可以隐藏非scalaish集合。

我很好奇推出自己的基于Java NavigableMap的解决方案有多难,而且它非常简单:

  • 定义包含(开始,结束,存储值)
  • 的类MyValue
  • 使用将起点映射到相应的MyValue
  • 的地图

在Java中只有40 lines与Lombok(在Scala中可能更少),我不会害怕任何维护。我写了一篇非常简陋的test