Scala Получает ближайшее значение на карте

#scala #dictionary

#scala #словарь

Вопрос:

Я пытаюсь получить закрытое значение на карте по ключу.

У меня есть эта карта
val map = Map(1 -> «aaa», 2 -> «bbb», 3 -> «dddd», 5 -> «eeee», 9 -> «gggg», 100 -> «z»)

если я запрашиваю значение с ключом 1, я должен получить «aaa», если я запрашиваю значение с ключом 6, я должен получить «eeee».

Есть идеи, как добиться этого простым способом?

Комментарии:

1. На вашей карте нет 6. Почему вы хотите, чтобы 6 притворялось 5?

2. Что, если вы попросите 4 ?

Ответ №1:

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