Maison > développement back-end > Golang > le corps du texte

Comment résoudre le problème d'échec de suppression de Golang

PHPz
Libérer: 2023-04-05 09:23:31
original
715 Les gens l'ont consulté

Golang est un langage de programmation en développement rapide. Il est apprécié par de plus en plus de développeurs en raison de ses avantages tels que la simplicité, la facilité d'apprentissage, l'efficacité et la stabilité. Cependant, même dans un langage de programmation aussi excellent, il y aura certains problèmes, tels que l'échec de l'appel de fonction de suppression lors du développement à l'aide de Golang. La fonction

remove est une méthode dans Golang pour supprimer des éléments spécifiés. Sa forme la plus couramment utilisée est :

func remove(slice []Type, elem Type) []Type
Copier après la connexion

où, slice représente la tranche sur laquelle opérer et elem représente l'élément à supprimer. Lors de l'utilisation de cette fonction, nous devons également faire attention aux points suivants :

  • La tranche transmise doit être un objet slice.
  • L'élément transmis doit être du même type que l'élément dans la tranche.
  • Après avoir appelé la fonction, un nouvel objet slice sera renvoyé, qui ne contiendra pas les éléments supprimés.

Cependant, parfois, en appelant la fonction de suppression, nous constaterons qu'elle ne fonctionne pas comme prévu. Par exemple, l'exemple suivant :

package main

import "fmt"

func main() {
    // create slice
    slice := []int{1, 2, 3, 4, 5}

    // remove element
    slice = remove(slice, 3)

    // print slice
    fmt.Println(slice)
}

func remove(slice []int, elem int) []int {
    for i, v := range slice {
        if v == elem {
            return append(slice[:i], slice[i+1:]...)
        }
    }
    return slice
}
Copier après la connexion

Dans cet exemple, nous définissons une fonction nommée remove, qui supprimera l'élément 3 de la tranche lorsqu'elle sera appelée. Bien qu'il ne semble y avoir aucun problème dans le code, lorsque nous l'exécutons, nous constatons que le résultat de sortie n'est pas {1,2,4,5} auquel nous nous attendions, mais {1,2,4,5,5} .

Alors, où est le problème ? Regardons d'abord l'implémentation du code de la fonction Remove :

func remove(slice []int, elem int) []int {
    for i, v := range slice {
        if v == elem {
            return append(slice[:i], slice[i+1:]...)
        }
    }
    return slice
}
Copier après la connexion

Dans cette fonction, nous parcourons d'abord la tranche entière et trouvons l'élément à supprimer. Ensuite, nous appelons la fonction append pour rejoindre les deux parties de l'élément dans la tranche afin de réaliser la suppression.

Cependant, il y a un problème évident avec une telle opération : si l'élément à supprimer est situé à la dernière position de la tranche, alors nous n'avons effectivement effectué aucune opération sur la tranche, donc la tranche renvoyée est la même que le paramètre d'entrée, ce qui donne Il y a deux éléments identiques dans la tranche.

Alors, comment résoudre ce problème ? En fait, c'est très simple. Il suffit d'enregistrer l'indice de l'élément pendant le processus de parcours et de déterminer si l'indice est égal à la longueur de la tranche moins un avant l'opération de suppression. Le code modifié est le suivant :

func remove(slice []int, elem int) []int {
    for i, v := range slice {
        if v == elem {
            if i == len(slice)-1 {
                return slice[:i]
            }
            return append(slice[:i], slice[i+1:]...)
        }
    }
    return slice
}
Copier après la connexion

Avec cette modification, nous pouvons supprimer correctement l'élément spécifié dans l'appel à la fonction Remove, évitant ainsi le problème de l'impossibilité de supprimer et de dupliquer des éléments.

En résumé, Golang a quelques problèmes lors de l'utilisation de la fonction de suppression. Grâce à l'analyse et à la résolution des problèmes, nous pouvons avoir une compréhension et une utilisation plus approfondies de ce langage, et pouvons également mieux améliorer l'efficacité du développement et apporter plus de commodité à notre travail.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!