1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- 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)
- }
- }
|