Scala在地图上获取最接近的值

时间:2019-04-10 13:38:22

标签: scala dictionary

我试图通过键获取地图中的闭合值。

我有这张地图
val map = Map(1->“ aaa”,2->“ bbb”,3->“ dddd”,5->“ eeee”,9->“ gggg”,100->“ z”)

如果我用钥匙1要求价值,我应该得到“ aaa”,如果我用钥匙6要求价值,我应该得到“ eeee”。

有什么想法可以通过简单的方式实现吗?

1 个答案:

答案 0 :(得分:3)

您需要为此使用SortedMap

def findClosest(map: SortedMap[Int, String], key: Int): Option[String] = 
  (map.to(key).lastOption, map.from(key).headOption).match { 
     case (Some((lk,lv)), Some((rk,rv))) if rk - key < key - lk => Some(rv)
     case (left, right) => (left orElse right).map(_._2)         
   }