需要对数组去重,一开始懒得写,搜索了下网上的实现,发现要么建立一个新的数组,要么需要多次拷贝。
由于需要处理的量比较大,性能需要尽可能的比较好,所以自己写了个,最悲观的情况下每个元素最多移动一次。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | package main import ( "fmt" "sort" ) func RemoveDuplicate(v []int) []int { //为了性能需要尽可能的减小拷贝,最悲观的情况每个元素只移动一次。 toIndex := 0 p := 0 for i, _ := range v { // 为了实际去重结构时减小内存拷贝 c := &v[i] if p == *c && i != 0 { // 重复内容,跳过 continue } if i != toIndex { // 需要移动当前元素 v[toIndex] = *c } toIndex++ p = *c } return v[:toIndex] } func main() { v := []int{9, 1, 1, 9, 2, 2, 3, 3, 3, 4, 5, 6, 7, 7, 7, 7, 8} // 升序排序 sort.Slice(v, func(i, j int) bool { return v[i] <= v[j] }) //sort.Ints(v) // 去重 v = RemoveDuplicate(v) // 打印结果 // []int{1, 2, 3, 4, 5, 6, 7, 8, 9} fmt.Printf("%#v", v) } |