Golang 从哈希集合中根据值获取键
在 Golang 中,我们可以使用哈希映射(hashmap)来执行各种操作,如删除、更新和存储哈希集合中的值。在本文中,我们将使用两个不同的示例来理解如何根据值从哈希集合中获取键。在第一个示例中,我们将使用一个外部函数并迭代映射以从值获取键;在第二个示例中,我们将使用一个反向映射来获取所需值的键。
步骤
- 创建一个名为 main 的包,并在程序中声明 fmt(格式化包),其中 main 生成可执行代码,fmt 用于格式化输入和输出。
-
创建一个名为 get_value_from_key 的外部函数,它有两个参数:哈希映射和要获取键的值。
-
迭代哈希映射,并在每次迭代中检查值是否等于哈希映射的 val。
-
如果为真,则返回被检查值的键,如果该值不在哈希映射中,则返回空字符串。
-
在 main 函数中,使用 map 文字创建一个哈希映射,其中键的类型为字符串,值的类型为整数。
-
从主函数调用外部函数,并使用两个参数获取返回的键值。
-
再次使用一个不在哈希映射中的值调用该函数,此时将返回一个空字符串。
-
使用 fmt.Println() 函数将键打印到控制台,其中 ln 表示换行。
示例1
在这个示例中,我们将创建一个带有两个参数的外部函数,即哈希映射和要打印的键的值。
package main
import "fmt"
func get_value_from_key(hash map[string]int, value int) string {
for key, val := range hash {
if val == value { //check if the value is equal to the val from hashmap return the key
return key
}
}
return ""
}
func main() {
// Example hash collection
hashmap := map[string]int{
"one": 10,
"two": 20,
"three": 30,
}
// obtain key for value 2
key := get_value_from_key(hashmap, 20)
fmt.Println("The key to corresponding value is:")
fmt.Println(key)
// obtain key for value 4 (not found)
key = get_value_from_key(hashmap, 40)
fmt.Println(key)
}
输出
The key to corresponding value is:
two
示例2
在这个示例中,我们将创建一个映射,其中我们将以相反的方式将键分配给值,然后我们将返回输入的值对应的键。输出将是对应值的键。让我们通过代码和算法来探索它。
package main
import "fmt"
func get_key_from_value(hash map[string]int, value int) string {
reverseHash := make(map[int]string)
for key, val := range hash {
reverseHash[val] = key //use map reversal to add the leys to the following values
}
return reverseHash[value] //return the key following to this value
}
func main() {
// Example hash collection
hashmap := map[string]int{
"one": 10,
"two": 20,
"three": 30,
}
// obtain key for value 2
key := get_key_from_value(hashmap, 20)
fmt.Println("The key of the above value is: ")
fmt.Println(key) // Output: two
// obtain key for value 4 (not found)
key = get_key_from_value(hashmap, 40)
fmt.Println(key) // Output:
}
输出
The key of the above value is:
two
结论
我们使用两种方法执行了基于哈希集合中的值获取键的程序。在第一个示例中,我们使用了一个外部函数和迭代来获取所需的键,在第二个示例中,我们使用了一个反向映射技巧来获得期望的输出。