Maison >développement back-end >Golang >Comment trouver des éléments uniques dans une tranche ou un tableau Go ?

Comment trouver des éléments uniques dans une tranche ou un tableau Go ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-02 11:02:30422parcourir

How to Find Unique Elements in a Go Slice or Array?

Recherche d'éléments uniques dans une tranche ou un tableau Go

Lors du traitement des données dans Go, il peut être nécessaire d'extraire uniquement les éléments uniques à partir d’une tranche ou d’un tableau. Bien que Python fournisse des constructions pratiques telles que des ensembles à cet effet, Go n'offre pas nativement de fonctionnalités intégrées similaires.

Considérez l'exemple de code fourni dans la question, où l'intention est de trouver les coordonnées uniques dans une liste. contenant des doublons. Le code tente d'y parvenir en parcourant à la fois la liste originale (visitée) et la liste unique initialement vide, en comparant chaque élément visité à tous les éléments uniques en utilisant la réflexion.

Analyse du code et erreurs

Cependant, le code contient plusieurs problèmes :

  • L'utilisation de la réflexion (reflect.DeepEqual()) pour la comparaison d'éléments est inutile et introduit une couche supplémentaire de complexité.
  • La boucle interne ajoute aveuglément des éléments sans se demander s'ils existent déjà de manière unique, ce qui entraîne de multiples ajouts du même élément.

Solution améliorée

Une solution simplifiée et plus efficace qui suit la logique souhaitée est présentée ci-dessous :

<code class="go">visited := []visit{
    visit{1, 100},
    visit{2, 2},
    visit{1, 100},
    visit{1, 1},
}
var unique []visit

for _, v := range visited {
    skip := false
    for _, u := range unique {
        if v == u {
            skip = true
            break
        }
    }
    if !skip {
        unique = append(unique, v)
    }
}

fmt.Println(unique)</code>

Solution alternative utilisant la carte

Alternativement, on peut exploiter la carte de Go[visiter] bool pour créer une structure de type ensemble et extraire les éléments uniques comme suit :

<code class="go">visited := []visit{
    visit{1, 100},
    visit{2, 2},
    visit{1, 100},
    visit{1, 1},
}
unique := map[visit]bool{}

for _, v := range visited {
    unique[v] = true
}

fmt.Println(unique)</code>

Les clés de la carte représentent les éléments uniques. Pour obtenir une tranche de valeurs de visite uniques, une étape supplémentaire est nécessaire :

<code class="go">visited := []visit{
    visit{1, 100},
    visit{2, 2},
    visit{1, 100},
    visit{1, 1},
}
var unique []visit

m := map[visit]bool{}

for _, v := range visited {
    if !m[v] {
        m[v] = true
        unique = append(unique, v)
    }
}

fmt.Println(unique)</code>

Ces solutions trouvent efficacement les éléments uniques dans une tranche ou un tableau Go, en adhérant à l'énoncé du problème et en fournissant des alternatives efficaces une fois construites. dans l'ensemble, la fonctionnalité fait défaut.

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