Dans le langage Go, parcourir et supprimer des éléments est une exigence relativement courante. Cependant, en raison des particularités du langage Go, certains détails doivent être pris en compte. Cet article présentera ce à quoi vous devez faire attention lors du parcours et de la suppression d'éléments dans le langage Go, et comment l'implémenter correctement.
Les structures de données slice et map du langage Go sont très pratiques à utiliser. Les tranches peuvent se développer automatiquement et les cartes peuvent accéder rapidement aux valeurs correspondantes en fonction des valeurs clés. Ces fonctionnalités rendent le langage Go très adapté au traitement de grandes quantités de données. Cependant, lorsque vous parcourez des tranches et des cartes et supprimez des éléments, vous devez faire attention aux problèmes suivants.
- Traverser une tranche pour supprimer des éléments
Lors de la suppression d'éléments dans une tranche, vous devez faire attention aux points suivants :
# 🎜🎜# 1) Ne modifiez pas la tranche pendant le parcours La suppression directe de la tranche pendant le parcours entraînera l'invalidité de l'index, entraînant une suppression accidentelle ou une suppression manquée. Par exemple :func main() { nums := []int{1, 2, 3, 4, 5} for i, n := range nums { if n == 3 { nums = append(nums[:i], nums[i+1:]...) } } fmt.Println(nums) // 1 2 4 5 }Lorsque le code ci-dessus passe à l'élément
3
, il sera supprimé. Cependant, comme la longueur et l'index de la tranche ont été modifiés lors de la suppression de l'élément, l'index des éléments suivants a changé. En fait, seul l'élément 4
après 3
a été supprimé. , et 3
lui-même n'a pas été supprimé. 3
这个元素时,会将其删除。但是,由于在删除元素时修改了slice的长度和索引,导致后面的元素索引发生了变化,实际上只删掉了3
的后一个元素4
,而3
本身并未被删掉。
为了避免这种情况,可以使用另一个slice来记录要删除的元素的下标,遍历完后再进行删除操作。例如:
func main() { nums := []int{1, 2, 3, 4, 5} delIdx := []int{} for i, n := range nums { if n == 3 { delIdx = append(delIdx, i) } } for i, idx := range delIdx { nums = append(nums[:idx-i], nums[idx-i+1:]...) } fmt.Println(nums) // 1 2 4 5 }
在上述代码中,首先定义了一个空slicedelIdx
,用于记录要删除的元素的下标。在遍历nums
时,如果找到要删除的元素,则把该元素的下标加入到delIdx
中。在遍历完毕后,再对nums
进行删除操作。
2)使用“三指针”实现删除
另一种在遍历slice时删除元素的方法是采用“三指针”的方式。即使用一个指针i
遍历slice,一个指针j
记录要删除的元素的数量,一个指针k
记录正常的元素。具体实现如下:
func main() { nums := []int{1, 2, 3, 4, 5} j := 0 for i := range nums { if nums[i] != 3 { nums[j] = nums[i] j++ } } nums = nums[:j] fmt.Println(nums) // 1 2 4 5 }
在上述代码中,首先定义一个指针j
表示要删除的元素的数量。然后使用指针i
遍历slice,如果当前元素不需要删除,则将其移动到指针k
所在的位置,然后k
加1,表示正常的元素数量增加了1。如果当前元素需要删除,则跳过即可。在遍历结束后,使用nums[:j]
来删除多余的元素。
- 遍历map删除元素
在Go语言的map中,删除元素的操作非常简单。只需要使用delete
函数即可。例如:
func main() { m := map[string]int{"a": 1, "b": 2, "c": 3, "d": 4} for k, v := range m { if v == 3 { delete(m, k) } } fmt.Println(m) // map[a:1 b:2 d:4] }
在遍历map时删除元素,不会出现索引失效的情况。因为map是无序的,每个元素的位置并不重要。因此,直接在遍历时使用delete
函数即可。
需要注意的是,在遍历map时不能修改map的长度。例如下面这段代码会导致panic:
func main() { m := map[string]int{"a": 1, "b": 2, "c": 3, "d": 4} for k := range m { if k == "c" { m["e"] = 5 } fmt.Println(m[k]) } }
在遍历到键为c
的元素时,代码向map中添加了一个新的键值对"e":5
。由于map的长度改变了,会导致运行时panic。
综上所述,Go语言中遍历删除元素需要注意的地方有:
1)在遍历slice删除元素时,不要直接对slice进行删除操作,应该使用另一个slice来记录要删除的元素下标,遍历完后再进行删除操作;或者使用“三指针”实现删除。
2)在遍历map删除元素时,可以直接使用delete
Afin d'éviter cette situation, vous pouvez utiliser une autre tranche pour enregistrer l'indice de l'élément à supprimer, puis effectuer l'opération de suppression après le parcours. Par exemple :
Dans le code ci-dessus, une tranche videdelIdx
est d'abord définie pour enregistrer l'indice de l'élément à supprimer. Lors du parcours de nums
, si l'élément à supprimer est trouvé, l'indice de l'élément est ajouté à delIdx
. Une fois le parcours terminé, supprimez les nums
.
i
est utilisé pour parcourir la tranche, un pointeur j
enregistre le nombre d'éléments à supprimer et un pointeur k
enregistre les éléments normaux. L'implémentation spécifique est la suivante : #🎜🎜#rrreee#🎜🎜#Dans le code ci-dessus, définissez d'abord un pointeur j
pour représenter le nombre d'éléments à supprimer. Utilisez ensuite le pointeur i
pour parcourir la tranche. Si l'élément actuel n'a pas besoin d'être supprimé, déplacez-le à l'emplacement du pointeur k
, puis ajoutez 1 à. k
, indiquant que le nombre normal d'éléments a augmenté de 1. Si l'élément actuel doit être supprimé, ignorez-le. Une fois le parcours terminé, utilisez nums[:j]
pour supprimer les éléments en excès. #🎜🎜#- #🎜🎜#Parcourir la carte pour supprimer des éléments#🎜🎜##🎜🎜##🎜🎜#Dans la carte de langue Go, l'opération de suppression d'éléments est très simple. Utilisez simplement la fonction
delete
. Par exemple : #🎜🎜#rrreee#🎜🎜#La suppression d'éléments lors de la traversée de la carte n'entraînera pas d'échec de l'index. La carte n’étant pas ordonnée, la position de chaque élément n’a pas d’importance. Par conséquent, utilisez simplement la fonction delete
directement pendant le parcours. #🎜🎜##🎜🎜#Il est à noter que la longueur de la carte ne peut pas être modifiée lors du parcours de la carte. Par exemple, le code suivant provoquera la panique : #🎜🎜#rrreee#🎜🎜#Lors du passage vers l'élément avec la clé c
, le code ajoute une nouvelle paire clé-valeur au carte "e":5
. Étant donné que la longueur de la carte change, cela provoquera une panique à l'exécution. #🎜🎜##🎜🎜#Pour résumer, ce à quoi vous devez faire attention lors du parcours et de la suppression d'éléments en langage Go sont : #🎜🎜##🎜🎜#1) Lorsque vous parcourez une tranche pour supprimer des éléments, ne supprimez pas directement la tranche. Vous devez utiliser une autre tranche pour enregistrer l'indice de l'élément à supprimer, puis effectuer l'opération de suppression après le parcours ou utiliser « trois pointeurs » pour implémenter la suppression. #🎜🎜##🎜🎜#2) Lorsque vous parcourez la carte pour supprimer des éléments, vous pouvez directement utiliser la fonction delete
sans échec d'index. Mais la longueur de la carte ne peut pas être modifiée lors du parcours. #🎜🎜##🎜🎜#Après avoir maîtrisé les compétences ci-dessus, nous pouvons correctement mettre en œuvre l'opération de parcours et de suppression d'éléments en langage Go. #🎜🎜#Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Les principales différences entre Golang et Python sont les modèles de concurrence, les systèmes de type, les performances et la vitesse d'exécution. 1. Golang utilise le modèle CSP, qui convient aux tâches simultanées élevées; Python s'appuie sur le multi-threading et Gil, qui convient aux tâches à forte intensité d'E / S. 2. Golang est un type statique, et Python est un type dynamique. 3. La vitesse d'exécution du langage compilée de Golang est rapide, et le développement du langage interprété par Python est rapide.

Golang est généralement plus lent que C, mais Golang présente plus d'avantages dans l'efficacité de programmation et de développement simultanée: 1) Le modèle de collecte et de concurrence de Golang de Golang le fait bien fonctionner dans des scénarios à haute concurrence; 2) C obtient des performances plus élevées grâce à la gestion manuelle de la mémoire et à l'optimisation matérielle, mais a une complexité de développement plus élevée.

Golang est largement utilisé dans le cloud computing et DevOps, et ses avantages résident dans la simplicité, l'efficacité et les capacités de programmation simultanées. 1) Dans le cloud computing, Golang gère efficacement les demandes simultanées via les mécanismes de goroutine et de canal. 2) Dans DevOps, les fonctionnalités de compilation rapide de Golang et de plate-forme en font le premier choix pour les outils d'automatisation.

Golang et C ont chacun leurs propres avantages dans l'efficacité du rendement. 1) Golang améliore l'efficacité par le goroutine et la collecte des ordures, mais peut introduire un temps de pause. 2) C réalise les hautes performances grâce à la gestion et à l'optimisation manuelles, mais les développeurs doivent faire face aux fuites de mémoire et à d'autres problèmes. Lors du choix, vous devez considérer les exigences du projet et la pile de technologies d'équipe.

Golang convient plus à des tâches de concurrence élevées, tandis que Python présente plus d'avantages dans la flexibilité. 1. Golang gère efficacement la concurrence par le goroutine et le canal. 2. Python repose sur le filetage et l'asyncio, qui est affecté par GIL, mais fournit plusieurs méthodes de concurrence. Le choix doit être basé sur des besoins spécifiques.

Les différences de performance entre Golang et C se reflètent principalement dans la gestion de la mémoire, l'optimisation de la compilation et l'efficacité du temps d'exécution. 1) Le mécanisme de collecte des ordures de Golang est pratique mais peut affecter les performances, 2) la gestion manuelle de C et l'optimisation du compilateur sont plus efficaces dans l'informatique récursive.

ChooseGolangForHighPerformanceAnd Concurrence, IdealForBackendServices andNetworkProgramming; selectPythonForrapidDevelopment, dataScience et MachineLearningDuetOtsSertilityAnStensiveLibrarary.

Golang et Python ont chacun leurs propres avantages: Golang convient aux performances élevées et à la programmation simultanée, tandis que Python convient à la science des données et au développement Web. Golang est connu pour son modèle de concurrence et ses performances efficaces, tandis que Python est connu pour sa syntaxe concise et son écosystème de bibliothèque riche.


Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Version Mac de WebStorm
Outils de développement JavaScript utiles

Dreamweaver CS6
Outils de développement Web visuel

Télécharger la version Mac de l'éditeur Atom
L'éditeur open source le plus populaire

DVWA
Damn Vulnerable Web App (DVWA) est une application Web PHP/MySQL très vulnérable. Ses principaux objectifs sont d'aider les professionnels de la sécurité à tester leurs compétences et leurs outils dans un environnement juridique, d'aider les développeurs Web à mieux comprendre le processus de sécurisation des applications Web et d'aider les enseignants/étudiants à enseigner/apprendre dans un environnement de classe. Application Web sécurité. L'objectif de DVWA est de mettre en pratique certaines des vulnérabilités Web les plus courantes via une interface simple et directe, avec différents degrés de difficulté. Veuillez noter que ce logiciel

Navigateur d'examen sécurisé
Safe Exam Browser est un environnement de navigation sécurisé permettant de passer des examens en ligne en toute sécurité. Ce logiciel transforme n'importe quel ordinateur en poste de travail sécurisé. Il contrôle l'accès à n'importe quel utilitaire et empêche les étudiants d'utiliser des ressources non autorisées.