【问题标题】:How to get key for value from Hashmap in Kotlin?如何从 Kotlin 中的 Hashmap 获取值的关键?
【发布时间】:2019-10-24 15:34:34
【问题描述】:

我在 Kotlin 中有 HashMap

val map = HashMap<String, String>()

我想知道如何在不遍历完整的 HashMap 的情况下从该 HashMap 获取特定值的密钥?

【问题讨论】:

  • 你试过filterValues {} 吗?
  • 不行,请分享代码。
  • 没办法,值没有被索引。尝试使用 BiMap,它是来自 Guava 的双向 Map 实现。
  • 您是否还需要获取特定键的值? (如果没有,你的 HashMap 是倒退的)。

标签: android kotlin 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]
      

      希望对你有帮助!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-11-25
        • 2013-04-21
        • 1970-01-01
        • 1970-01-01
        • 2013-09-16
        • 2020-10-12
        • 1970-01-01
        相关资源
        最近更新 更多