Scala排序的地图没有方法floor或ceil

时间:2017-03-20 09:56:46

标签: scala collections

我是Scala的新手,但现在我想使用Split()来修复地板。我的意思是这样的:

scala.collection.SortedMap

1 个答案:

答案 0 :(得分:5)

您可以使用from上的untiltoSorted来执行您想要的操作,并声明他们会返回远程投影 [1] 集合:

m.to(l).lastKey    //floor

m.from(l).firstKey //ceil

你必须检查空虚,因为它们会抛出NoSuchElementException。我通常会使用隐式转换添加一些有用的实用程序:

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

然后:

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))

[1] - 暗示这是O(1),(或者至少不是 O(N)