Go language (basique) -map

1. Introduction

  • L'une des structures de données les plus utiles en informatique est la table de hachage. Différentes implémentations de table de hachage fournissent de nombreuses fonctionnalités uniques. Mais fondamentalement, cela inclut la requête, l'ajout et la suppression d'éléments. Go fournit une carte de type intégrée, qui implémente les fonctions de base d'une table de hachage.
  • Donc, si vous souhaitez utiliser une table de hachage en langage Go, utilisez map.

2. Utilisation de base de la carte

2.1, déclaration et initialisation

2.1.1, déclaration
var m map[string]int //此时 m 还没有被分配内存空间,是个 nil
  • Si l'espace n'est pas alloué à la carte et que des données y sont insérées, il n'y aura pas d'erreur de renseignement.
var m map[string]int
m["中国"] = 1
//报错:panic: assignment to entry in nil map

Remarque! Lors de la déclaration de la carte, le type de données de la clé est requis, il doit s'agir d'un type comparable, et pour la valeur, il peut s'agir de n'importe quel type de données. Il existe de nombreux types comparables, ce qui est difficile à retenir, mais il n'y en a que trois types non comparables: slice, map et func .

2.1.2, initialisation
  • L'initialisation de la carte alloue en fait de l'espace à la carte. Ensuite, il existe trois façons d'initialiser la carte.
  • première méthode
var m = map[string]int{
    
    } //不要笑看了这一对大括号,这样就算给 map 分配空间了
m["中国"] = 1
  • Voie deux
var m map[string]int
m = make(map[string]int, 2)
  • Troisième voie
var m = map[string]int{
    
    
	"中国" : 1,
	"美国" : 2,
}

2.2, ajouter, supprimer, modifier et vérifier

var m = map[string]int{
    
    }
//1.增
m["中国"] = 1
m["美国"] = 2 //m->map[中国:1 美国:2]
//2.删
delete(m, "美国") //m->map[中国:1]
//3.改
m["中国"] = 100 //m->map[中国:0]
//4.查
val, ok := m["中国"] //val=100, ok=true
  • Vous pouvez également le vérifier comme ceci, c'est-à-dire que vous n'avez pas besoin d'accepter de recevoir la présence ou l'absence d'une certaine paire clé-valeur.
val := m["中国"] //val=100
  • Lors de la suppression d'une paire clé-valeur dans la mappe ci-dessus, si la clé correspondante n'existe pas dans la mappe, aucune modification ne sera apportée; lorsqu'une paire clé-valeur n'existe pas dans la mappe de requête, si elle n'existe pas, le value sera retourné La valeur zéro du type de données, par exemple, le type de données de value est int et la valeur zéro de int est 0.

2.3, parcourez la carte

func Traverse() {
    
    
	m := map[string]int{
    
    
		"china" : 1,
		"america" : 2,
		"england" : 3,
		"japan" : 4,
		"russia" : 5,
		"germany" : 6,
		"india" : 7,
	}
	for k, v := range m {
    
    
		fmt.Printf("number %d is %s\n", v, k)
	}
}
number 5 is russia
number 6 is germany
number 7 is india
number 1 is china
number 2 is america
number 3 is england
number 4 is japan
  • Voyant que l'ordre d'affichage des résultats de parcours ne correspond pas à l'ordre d'insertion des données, que dois-je faire si je veux parcourir de manière ordonnée?
func SortTraverse() {
    
    
	m := map[string]int{
    
    
		"china" : 1,
		"america" : 2,
		"england" : 3,
		"japan" : 4,
		"russia" : 5,
		"germany" : 6,
		"india" : 7,
	}
	keys := []string{
    
    }
	for k := range m {
    
    
		keys = append(keys, k)
	}
	sort.Strings(keys)
	for _, k := range keys {
    
    
		fmt.Printf("number %d is %s\n", m[k], k)
	}
}
number 2 is america
number 1 is china
number 3 is england
number 6 is germany
number 7 is india
number 4 is japan
number 5 is russia

2.4, transfert de paramètres de fonction

  • En tant que paramètre de fonction, map reçoit en fait la valeur d'adresse de map. Si vous ne le croyez pas, jetons un œil.
func ChangeMap(m map[string]int) {
    
    
	fmt.Printf("对 m 未做修改前:m 的地址是 %p\n", m)
	m["美国"] = 2
	fmt.Printf("对 m 插入1条数据后:m 的地址是 %p\n", m)
	m["俄罗斯"] = 3
	fmt.Printf("对 m 插入2条数据后:m 的地址是 %p\n", m)
	for i := 0; i < 9999998; i++ {
    
    
		m["国家" + strconv.Itoa(i)] = i
	}
	fmt.Printf("对 m 插入10000000条数据后:m 的地址是 %p\n", m)
}

func main() {
    
    
	m := make(map[string]int, 2)
	m["中国"] = 1
	//m["美国"] = 2
	fmt.Printf("main.传参前,m 的地址是 %p\n", m)
	Map.ChangeMap(m)
	fmt.Println(m["国家123456"])
}
main.传参前,m 的地址是 0xc0000b6330
ChangeMap.对 m 未做修改前:m 的地址是 0xc0000b6330
ChangeMap.对 m 插入1条数据后:m 的地址是 0xc0000b6330
ChangeMap.对 m 插入2条数据后:m 的地址是 0xc0000b6330
ChangeMap.对 m 插入10000000条数据后:m 的地址是 0xc0000b6330
main. 123456

Je suppose que tu aimes

Origine blog.csdn.net/wxy_csdn_world/article/details/115126650
conseillé
Classement