有没有一种方法可以检查切片/映射中是否存在值?
我 只想 在切片中 不 存在值 时才 向切片添加值。
这可行,但似乎很冗长。有更好的方法吗?
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]
您的方法将为每次插入花费线性时间。更好的方法是使用map[int]struct{}。另外,您也可以使用a map[int]bool或类似名称,但是empty struct{}的优点是它不占用任何额外空间。因此,map[int]struct{}是一组整数的普遍选择。
map[int]struct{}
map[int]bool
struct{}
例:
set := make(map[int]struct{}) set[1] = struct{}{} set[2] = struct{}{} set[1] = struct{}{} // ... for key := range(set) { fmt.Println(key) } // each value will be printed only once, in no particular order // you can use the ,ok idiom to check for existing keys if _, ok := set[1]; ok { fmt.Println("element found") } else { fmt.Println("element not found") }