用科特林中的区域键存储值而不是唯一键?

时间:2019-01-04 08:32:43

标签: arraylist kotlin hashmap range

偶然发现了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)

但是我不知道如果我有uniqe输入键怎么办呢

下一步不正确。

   val value = durationFromAngel[5F]

但是我想通过1F..5F范围内的5F值获取

1 个答案:

答案 0 :(得分:1)

Hashmap并不能真正帮助您,因为您无法按键查找。而是使用列表并找到您要查找的范围:

 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)

但是那只是语法糖。

Try it!