首页 > 解决方案 > 使用区域键而不是 kotlin 中的唯一键存储值?

问题描述

无意中发现了 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

标签: arraylistkotlinhashmaprange

解决方案


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)

但这只是语法糖。

尝试一下!


推荐阅读