Go语言实现数组去重的功能

7个月前 0 0 391

Go

比如存在如下一个数组

s := []int{1,2,2,3,6,8,1,6,10,10,9,9,9,9,9,9,9,9,103,8}

如何将元素去重?

方法一

利用中间状态

func unique(m []int) []int {
    s := make([]int, 0)
    for _, value := range m {
        //首先定义一个状态
        status := true
        for _, v := range s {
            if (value == v) {
                //如果有相同的值就改变状态值
                status = false
                break
            }
        }
        if status {
            s = append(s, value)
        }
    }

    return s
}

方法二

利用map的特性 => key值唯一性

func unique2(m[]int) []int {
    s := make([]int, 0)
    smap := make(map[int]int)
    for _, value := range m {
        //计算map长度
        length := len(smap)
        smap[value] = 1
        //比较map长度, 如果map长度不相等, 说明key不存在
        if len(smap) != length {
            s = append(s, value)
        }
    }

    return  s

}

测试一下结果:

func main() {
    fmt.Println(unique(s))
    fmt.Println(unique2(s))
}

//结果
[1 2 3 6 8 10 9 103]
[1 2 3 6 8 10 9 103]

版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)

评论 (0)

    暂无评论~

njphper@copyright From 2014 to 2019-02-17