Golang 地图

在本教程中,您将学习什么是地图数据类型以及何时在Golang中使用它。

映射是一种数据结构,可为您提供无序的键/值对集合(映射在Php中有时也称为关联数组,在Java中是哈希表,在Python中也称为字典)。映射用于通过关联的键查找值。您可以根据键将值存储到地图中。

地图的优势在于它能够根据密钥快速检索数据。键就像索引一样,指向与该键关联的值。

映射是使用哈希表实现的,该哈希表可在数据元素上提供更快的查找,并且您可以通过提供键轻松地检索值。映射是无序集合,无法预测键/值对的返回顺序。地图上的每次迭代都可能返回不同的顺序。


地图初始化

在Golang中,地图用大括号括起来,并且具有键和值。创建地图数据类型的实例。

package main
 
import "fmt"
 
var 雇员 = map[]整型 {"Mark": 10, "Sandy": 20}
 
func main() {
	fmt.Println(雇员)
}

空地图声明

地图 雇员 创建具有 作为键类型和 整型 作为价值类型

package main
 
import "fmt"
 
func main() {
	var 雇员 = map[]整型 {}
	fmt.Println(雇员)        // map[]
	fmt.Printf("%T\n", 雇员) // map[string]int
}

地图声明使用 使 功能

使 函数以地图的类型为参数,并返回已初始化的地图。

package main
 
import "fmt"
 
func main() {
	var 雇员 = 使(map[]整型 )
	employee["Mark"] = 10
	employee["Sandy"] = 20
	fmt.Println(雇员)
 
	employeeList := 使(map[]整型 )
	employeeList["Mark"] = 10
	employeeList["Sandy"] = 20
	fmt.Println(雇员List)
}

地图长度

要确定地图有多少项(键值对),请使用内置 len() 功能。

package main
 
import "fmt"
 
func main() {
	var 雇员 = 使(map[]整型 )
	employee["Mark"] = 10
	employee["Sandy"] = 20
 
	// Empty 地图
	employeeList := 使(map[]整型 )
 
	fmt.Println(len(雇员))     // 2
	fmt.Println(len(雇员List)) // 0
}

len() 对于未初始化的映射,函数将返回零。


访问项目

您可以通过在方括号内引用其键名来访问地图项。

package main
 
import "fmt"
 
func main() {
	var 雇员 = map[]整型 {"Mark": 10, "Sandy": 20}
 
	fmt.Println(雇员["Mark"])
}

获取“标记”键的值。


新增项目

通过使用新的索引键并为其分配值,可以将项目添加到地图。

package main
 
import "fmt"
 
func main() {
	var 雇员 = map[]整型 {"Mark": 10, "Sandy": 20}
	fmt.Println(雇员) // Initial 地图
 
	employee["Rocky"] = 30 // Add element
	employee["Josef"] = 40
 
	fmt.Println(雇员)
}

更新值

您可以通过引用特定项的键名来更新其值。

package main
 
import "fmt"
 
func main() {
	var 雇员 = map[]整型 {"Mark": 10, "Sandy": 20}
	fmt.Println(雇员) // Initial 地图
 
	employee["Mark"] = 50 // Edit item
	fmt.Println(雇员)
}

将“标记”更改为50


删除项目

内建 删除 函数从与提供的键关联的给定映射中删除项目。

package main
 
import "fmt"
 
func main() {
	var 雇员 = 使(map[]整型 )
	employee["Mark"] = 10
	employee["Sandy"] = 20
	employee["Rocky"] = 30
	employee["Josef"] = 40
 
	fmt.Println(雇员)
 
	删除(雇员, "Mark")
	fmt.Println(雇员)
}

遍历地图

对于...范围 循环语句可用于获取地图的索引和元素。

package main
 
import "fmt"
 
func main() {
    var 雇员 = map[]整型 {"Mark": 10, "Sandy": 20,
        "Rocky": 30, "Rajiv": 40, "Kate": 50}
    for key, element := range 雇员 {
        fmt.Println("Key:", key, "=>", "Element:", element)
    }
}

每次迭代都会返回一个键及其相关的元素内容。


截断图

有两种清除地图中所有项目的方法。

package main
 
func main() {
	var 雇员 = map[]整型 {"Mark": 10, "Sandy": 20,
		"Rocky": 30, "Rajiv": 40, "Kate": 50}
 
	// Method - I
	for k := range 雇员 {
		删除(雇员, k)
	}
 
	// Method - II
	employee = 使(map[]整型 )
}

排序地图键

A 按键 创建切片以存储地图的键值,然后对切片进行排序。用于按键顺序打印map值的排序切片。

package main
 
import (
	"fmt"
	"sort"
)
 
func main() {
	unSortedMap := map[]整型 {"India": 20, "Canada": 70, "Germany": 15}
 
	keys := 使([], 0, len(unSortedMap))
 
	for k := range unSortedMap {
		keys = append(keys, k)
	}
	sort.Strings(keys)
 
	for _, k := range keys {
		fmt.Println(k, unSortedMap[k])
	}
}

对地图值排序

要对地图的键值进行排序,您需要将其存储在“切片”中,然后对切片进行排序。

package main
 
import (
	"fmt"
	"sort"
)
 
func main() {
	unSortedMap := map[]整型 {"India": 20, "Canada": 70, "Germany": 15}
 
 // Int slice to store values of 地图。
	values := 使([]整型 , 0, len(unSortedMap))
 
	for _, v := range unSortedMap {
		values = append(values, v)
	}
 
 // Sort slice values.
	sort.Ints(values)
 
 // Print values of sorted Slice.
	for _, v := range values {
		fmt.Println(v)
	}
}
 

合并地图

的键和值 第二 添加地图 第一 地图。

package main
 
import "fmt"
 
func main() {
	first := map[]整型 {"a": 1, "b": 2, "c": 3}
	second := map[]整型 {"a": 1, "e": 5, "c": 3, "d": 4}
 
	for k, v := range 第二 {
		first[k] = v
	}
 
	fmt.Println(第一)
}