回答

收藏

如何检查for循环内的唯一性?

技术问答 技术问答 219 人阅读 | 0 人回复 | 2023-09-12

有没有办法检查切片/地图是否存在值?6 n8 q( i- i2 V- q
当切片中当存在值时,我想向切片添加值。
4 h. w+ H0 v5 y' R! k" w这是有效的,但似乎有更好的方法吗?
  |' A+ s  S; D8 ^. _
    3 f. J4 I1 V4 D2 y3 ^1 R
  • orgSlice := []int{1,2,3}newSlice := []int{}newInt := 2newSlice = append(newSlice,newInt)for _,v := range orgSlice    if v != newInt        newSlice = append(newSlice,v)   newSlice == code]               & t2 j4 p2 Y3 ^: M. F3 A
  •     解决方案:                                                               ( e5 q$ x5 P2 p2 d
  •                                                                 每次插入方法都需要线性时间。更好的方法是使用它map[int]struct{}.或者,你也可以使用  amap[int]bool或者类似的东西,但是空的struct{}的优点是它不占用任何额外的空间。map[int]struct{}是一组整数的流行选择。9 S9 X  t+ `2 L0 H' X
  • 例子:[code]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 keysif _,ok := set[1]; ok {  fmt.Println("element found")} else {  fmt.Println("element not found")}; b+ ?/ J) K( w) |5 a6 H
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则