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
Libérer: 2024-11-02 11:02:30
original
488 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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 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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal