Aller: Ajouter si unique

Est-il un moyen de vérifier en tranches/cartes pour la présence d'une valeur?

Je voudrais ajouter une valeur à une tranche seulement si elle ne pas existent dans le secteur.

Cela fonctionne, mais il semble clair. Est-il un beter façon de le faire?

orgSlice := []int{1, 2, 3}
newSlice := []int{}
newInt := 2

newSlice = append(newSlice, newInt)
for _, v := range orgSlice {
    if v != newInt {
        newSlice = append(newSlice, v)
    }
}

newSlice == [2 1 3]
  • Re:MODIFIER - c'est la même histoire pour être valable, toute carte de clé de type chaîne qui est.
  • Re:EDIT2 - si l'ordre des valeurs dans 'newSlice' n'a pas d'importance ET il sera utilisé/consommé à l'aide d'une gamme énoncé de sa construction est redondant - il suffit de gamme, les clés de la "set".
  • Merci pour vos commentaires. Je suis stocker la liste des ints en FGA de la banque de données et pour la fin de l'interrogation, il doit être une tranche ( []int ). N'cette exigence rend ma technique initiale le meilleur choix? Les listes seront petites.
  • Vous pouvez éviter l'utilisation de append() (et tous les réaffectations) par la création de la création d'un newslice := make([]int, len(set)) en premier lieu. Si vous faites beaucoup de ces "contient la clé ..." tests (au moins 2), la conversion de la tranche d'une carte[int]struct{} sera probablement beaucoup plus rapide, si vous faites juste un peu, une boucle dans la tranche directement est probablement mieux.
  • Ok, merci, j'apprécie vraiment que vous preniez le temps de vous expliquer tout cela.
InformationsquelleAutor Kyle Finley | 2012-02-12