package utils // RemoveRepByLoop 通过双重循环来过滤重复元素(时间换空间) func RemoveRepByLoop(slc []int64) []int64 { var result []int64 // 存放结果 for i := range slc { flag := true for j := range result { if slc[i] == result[j] { flag = false // 存在重复元素,标识为false break } } if flag { // 标识为false,不添加进结果 result = append(result, slc[i]) } } return result } // RemoveRepByMap 通过字典来过滤(空间换时间) func RemoveRepByMap(slc []int64) []int64 { var result []int64 tempMap := map[int64]byte{} // 存放不重复主键 for _, e := range slc { l := len(tempMap) tempMap[e] = 0 if len(tempMap) != l { // 加入map后,map长度变化,则元素不重复 result = append(result, e) } } return result } // RemoveRep 元素去重 func RemoveRep(slc []int64) []int64 { if len(slc) < 1024 { // 切片长度小于1024(数字不是特别精准)的时候,循环来过滤 return RemoveRepByLoop(slc) } else { // 大于的时候,通过map来过滤 return RemoveRepByMap(slc) } }