arraylist - 使用区域键而不是 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
解决方案
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)
但这只是语法糖。
推荐阅读
- java - 如何在循环内返回一个值,以便其他方法可以访问它?
- android - FLutter FirebaseAuth 电子邮件验证
- python - 为python unittest设置全局变量时如何避免lint错误
- python - 我的 django 项目存在属性问题。我正在用这个代码做一个电子商务网站
- python - 如何使用非有序值制作第二个 python x 轴?
- corda - Corda - 记录事务中的特定状态
- c++ - 如何将字符串路径从'\'转换为'/'或'\\'?
- assembly - 如何在 ARM64 中初始化一个 16 位整数数组?
- objective-c - 强制 FileManager().copyItem(_:_) 超时
- python - 以编程方式选择不等式运算符