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