有没有办法检查切片/地图是否存在值?
仅当切片中不存在值时,我才想向切片添加值。
这有效,但似乎冗长。有一个更好的方法吗?
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{}. 或者,您也可以使用 amap[int]bool或类似的东西,但空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") }