如何从 Kotlin 中的 Hashmap 获取值的关键?
Posted
技术标签:
【中文标题】如何从 Kotlin 中的 Hashmap 获取值的关键?【英文标题】:How to get key for value from Hashmap in Kotlin? 【发布时间】:2019-10-24 15:34:34 【问题描述】:我在 Kotlin 中有 HashMap
val map = HashMap<String, String>()
我想知道如何在不遍历完整的 HashMap
的情况下从该 HashMap
获取特定值的密钥?
【问题讨论】:
你试过filterValues
吗?
不行,请分享代码。
kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/…
没办法,值没有被索引。尝试使用 BiMap,它是来自 Guava 的双向 Map 实现。
您是否还需要获取特定键的值? (如果没有,你的 HashMap 是倒退的)。
【参考方案1】:
使用filterValues
val map = HashMap<String, String>()
val keys = map.filterValues it == "your_value" .keys
而keys
将是匹配给定值的所有键的集合
【讨论】:
> 没有遍历完整的HashMap
这个答案的问题是您将收到键值但在大括号内,例如[A] 或 [9] 而不是 A 或 9。仅供参考
是的,我提到它将是一个集合
所以查找速度与哈希映射的大小无关,就像键值查找一样?
如果你想摆脱大括号[a]
,你可以做.first()
或.last()
。你会得到a
【参考方案2】:
在 Kotlin HashMap 中,可以使用以下方式:
val hashMap = HashMap<String, String>() // Dummy HashMap.
val keyFirstElement = hashMap.keys.first() // Get key.
val valueOfElement = hashMap.getValue(keyFirstElement) // Get Value.
val keyByIndex = hashMap.keys.elementAt(0) // Get key by index.
val valueOfElement = hashMap.getValue(keyByIndex) // Get value.
【讨论】:
【参考方案3】:在最坏的情况下(如果地图中不存在匹配值),您将不得不遍历整个地图。但是,此代码将在找到匹配项后立即停止迭代:
val map = mapOf("a" to 1, "b" to 2, "c" to 3)
val matchingKey = map.entries.find it.value == 3 ?.key
println(matchingKey) // prints "c"
【讨论】:
【参考方案4】:如果您经常按值查找键,可能的解决方案是反转地图,这样您就可以按任何值获取任何键。
例如:
val reversed = map.entries.associate(k,v)-> v to k
val resultKey = reversed[value]
希望对你有帮助!
【讨论】:
以上是关于如何从 Kotlin 中的 Hashmap 获取值的关键?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Android Studio 中使用 Kotlin 从 Firebase 中的数据库中获取特定值?
如何使用Kotlin从Firestore中的数组字段中获取数据?
Kotlin Android Firebase 数据库 Hashmap 转换为类
如何从 JSON 数组中的 JSON 对象中的单个值获取数据?