Сохранить значение с помощью ключей области вместо уникального ключа в kotlin? - PullRequest
0 голосов
/ 04 января 2019

Случайно обнаружил магическую способность в Kotlin для записи значения с областью ключей в Kotlin

    private val durationFromAngel:HashMap<ClosedFloatingPointRange<Float>, Long> = 
 hashMapOf(1F..4F to 15L, 5F..9F to 150L, 10F..14F to 300L, 15F..29F to 700L)

Но не представляю, как с этим работать, если у меня есть уникальная клавиша ввода

Далее не правильно.

   val value = durationFromAngel[5F]

Но я хочу получить через это значение 5F из диапазона 1F..5F

1 Ответ

0 голосов
/ 04 января 2019

Hashmap действительно не поможет вам, так как вы не можете искать по ключу.Вместо этого используйте List и найдите диапазон, который вы ищете:

 val durationFromAngel =  listOf(
   1F..4F      to 15L, 
   5F..9F      to 150L, 
   10F..14F    to 300L, 
   15F..29F    to 700L
)

val (_, result) = durationFromAngel.find { (range) -> 6F in range }!!
println(result)

Конечно, вы также можете добавить функцию расширения как:

 operator fun <N: Comparable<N>, T> List<Pair<ClosedFloatingPointRange<N>, T>>.get(value: N) =
    this.find { (range) -> value in range }!!

val (range, value) = durationFromAngel[6f]
println(value)

, но это просто синтаксический сахар.

Попробуйте!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...