2011-08-12 7 views

Odpowiedz

8

Można po prostu mieć map[whatevertype]bool i ustawić wartość na true. Możesz dodać każdy element w plasterku jako klucz mapy, a następnie użyć numeru range, aby wycofać tylko te niepowtarzalne.

package main 
import "fmt" 
func main() { 
    m := make(map[string]bool) 
    s := make([]string, 0) 
    s = append(s, "foo") 
    s = append(s, "foo") 
    s = append(s, "foo") 
    s = append(s, "bar") 
    s = append(s, "bar") 
    for _, r := range s { 
     m[r] = true 
    } 
    s = make([]string, 0) 
    for k, _ := range m { 
     s = append(s, k) 
    } 
    fmt.Printf("%v\n", s) 
} 
+3

Chcę tylko dodać, że rzeczywiście można użyć dowolną typ jako wartość, ponieważ nie dbam o to. Ale użycie 'bool' zawsze ustawionego na true ma dodatkową zaletę polegającą na możliwości przetestowania, czy element istnieje po prostu przez indeksowanie, ponieważ gdy indeksujesz klucz i on nie istnieje, zwróci wartość zero dla typu wartości, co jest fałszywe dla booleans. – newacct