Golang中如何通过值访问map的键

Golang中如何通过值访问map的键 能否通过值来访问映射的键?

4 回复

谢谢,Rounak 谢谢,Sean

更多关于Golang中如何通过值访问map的键的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


根据值获取键

看看这个。我想这就是你想要的。

如Rounak分享的链接所示:如果这是一个不频繁的操作,你可以遍历映射的键和值,并返回与给定值匹配的键,例如:

func keysByValue(m map[string]string, value string) []string {
    var keys []string
    for k, v := range myMap {
        if value == v {
            keys = append(keys, k)
        }
    }
    return keys
}

正如这个答案所说,如果这是一个常见操作,你将需要另一个映射来提高效率。

在Golang中,无法直接通过值来访问map的键,因为map的设计是单向的键值对映射。但可以通过遍历map来实现反向查找。以下是一个示例:

package main

import "fmt"

func findKeyByValue(m map[string]int, value int) (string, bool) {
    for k, v := range m {
        if v == value {
            return k, true
        }
    }
    return "", false
}

func main() {
    m := map[string]int{
        "apple":  1,
        "banana": 2,
        "orange": 3,
    }

    if key, found := findKeyByValue(m, 2); found {
        fmt.Printf("找到键: %s\n", key) // 输出: 找到键: banana
    } else {
        fmt.Println("未找到对应的键")
    }
}

如果需要频繁进行反向查找,建议维护一个反向映射:

package main

import "fmt"

func createReverseMap(original map[string]int) map[int]string {
    reverse := make(map[int]string, len(original))
    for k, v := range original {
        reverse[v] = k
    }
    return reverse
}

func main() {
    original := map[string]int{
        "apple":  1,
        "banana": 2,
        "orange": 3,
    }

    reverseMap := createReverseMap(original)

    if key, exists := reverseMap[2]; exists {
        fmt.Printf("通过值找到键: %s\n", key) // 输出: 通过值找到键: banana
    }
}

注意:当多个键对应相同值时,反向映射会覆盖之前的键值对。如果需要处理这种情况,可以使用值到键切片的映射:

func createReverseMapMulti(original map[string]int) map[int][]string {
    reverse := make(map[int][]string)
    for k, v := range original {
        reverse[v] = append(reverse[v], k)
    }
    return reverse
}
回到顶部