Scala排序映射没有方法floor或ceil
我是Scala新手,但现在我想使用Scala排序映射没有方法floor或ceil,scala,collections,Scala,Collections,我是Scala新手,但现在我想使用Scala.collection.SortedMap检索地板。我的意思是这样的: val m = SortedMap[Long, String]() def retreiveAndProcess(l: Long) = { val floor = // get the floor of l to m //do some with floor } 您可以使用从、到和到执行所需操作,这些操作可在排序上找到,并声明它们返回集合的范围投影[1]: m.
Scala.collection.SortedMap
检索地板。我的意思是这样的:
val m = SortedMap[Long, String]()
def retreiveAndProcess(l: Long) = {
val floor = // get the floor of l to m
//do some with floor
}
您可以使用
从
、到
和到
执行所需操作,这些操作可在排序
上找到,并声明它们返回集合的范围投影[1]:
m.to(l).lastKey //floor
m.from(l).firstKey //ceil
您必须检查是否为空,因为这些将抛出NoTouchElementException
s。我通常会使用隐式转换添加一些有用的实用程序:
scala> implicit class SortedMapOps[K, V](val m: SortedMap[K, V]) extends AnyVal {
| def floor(k: K): Option[(K, V)] = {
| val n = m.to(k)
| //You could just use n.lastOption here
| if (n.isEmpty) None
| else Some((n.lastKey, n(n.lastKey)))
| }
| }
defined class SortedMapOps
然后:
[1]-这意味着这是
O(1)
,(或者至少不是O(N)
)你说地板是什么意思?带有作为参数提供的键的映射条目?@ThomasBöhm我是指小于参数的最近键为什么不简单地范围(lo,hi)
?
scala> SortedMap(1 -> "a", 2 -> "b", 3 -> "c", 5 -> "e")
res2: scala.collection.immutable.SortedMap[Int,String] = Map(1 -> a, 2 -> b, 3 -> c, 5 -> e)
scala> res2.floor(4)
res3: Option[(Int, String)] = Some((3,c))