Maison >développement back-end >Golang >Comment résoudre le problème d'échec de suppression de Golang

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

PHPz
PHPzoriginal
2023-04-05 09:09:06750parcourir

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

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
}

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
}

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
}

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!

Déclaration:
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