Scala SortedMap:获取大于给定键的所有键

Xio*_*345 3 scala scala-collections

给定一个Scala collection.SortedMap和一个键k,获得所有键(甚至更好,所有键值对)的最有效方法是什么,而不是存储在有序映射中.返回的键集应保留键的顺序.当然,我想避免仔细阅读整个数据结构(即使用),并利用地图的排序这一事实.kfilterKeys

我想做的事情如下:

val m = collection.SortedMap((1,1) -> "somevalue", (1,2) -> "somevalue", 
  (1,3) -> "somevalue", (2,1) -> "somevalue", (3,1) -> "somevalue")
m.getKeysGreaterThan((2,1))
// res0: scala.collection.SortedSet[(Int, Int)] = TreeSet((2,1), (3,1))
Run Code Online (Sandbox Code Playgroud)

如果您能想到更合适的类似地图的数据结构,请提出建议.

zig*_*tar 7

从API文档中试试这个:

m.from((2,1))
Run Code Online (Sandbox Code Playgroud)

请注意,结果包含键值.

我刚刚检查了Scala 2.10,TreeMap.from调用fromRedBlackTree,这看起来是一个有效的实现(通常是基于树的数据结构的O(log n)).