Go中是否存在集合?(比如在Python中)

riv*_*aet 11 collections set go

是否有任何Go集合类似于'在python中设置?

备择方案:

  • 是否有一种简单的方法来实现Go in Sets?
  • 是否有任何方法可以消除切片中的重复?

mkb*_*mkb 11

你可以只有一个map[whatevertype]bool并设置值true.您可以将切片中的每个元素添加为地图键,然后使用a range来仅返回唯一的元素.

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)
}
Run Code Online (Sandbox Code Playgroud)

  • 我只想补充一点,你实际上可以使用任意类型作为值,因为你不关心它.但是使用`bool`始终设置为true具有额外的好处,即能够仅通过索引来测试元素是否存在,因为当您索引键并且它不存在时,它将返回值类型的零值,这对于布尔人来说是错误的. (3认同)